2016-09-19 3 views
0

Более конкретный у меня есть функция (доход), которая суммирует числа, а затем, когда изменяется дата, я хочу добавить доход за день к общей сумме, деленной на число (количество дней с момента запуска - эта часть работает), поэтому я вижу средний доход pr. день:Вызов конкретной функции при изменении даты

func IncomeToday() -> Double { 

    let IncomeInput = Double(IncomeTextField.text!) 

    todayIncome = todayIncome + IncomeInput! 

    return todayIncome 

func TotalIncome() 

    let averageIncome = (totalIncome + IncomeToday())/ Days 

    averageIncome.text = "\(averageIncome)" 

Так что функция TotalIncome() я хочу работать, когда изменения даты (в 00:00). Это возможно, и если да, то как? (Я что-то воображаю в NSDate(), но не совсем уверен, как).

Большое спасибо!

+0

Будет ли пользователю открыть это приложение каждый день? Если это так, Id просто рассчитывает деньги каждый раз, когда они его открывают, проверяя, действительно ли вы уже сделали это сегодня. Будет довольно сложно сделать это, когда приложение будет в фоновом режиме каждую ночь в полночь. Не сказать, что это невозможно. Также просто дружеское примечание, как правило, вы делаете все имена функций в случае с верблюдом, например, IncomeToday() должен быть доходToday(), а ваши имена классов будут в форме WordWord – Dallas

+0

, что вы хотите сделать? вы хотите вызвать функцию один раз в день? –

+0

Dallas and @Ganesh Спасибо за ваш комментарий! , Да, я хотел бы, чтобы он мог вызвать функцию (которая рассчитывает средний доход) в фоновом режиме, чтобы пользователь не должен был заходить в приложение для обновления (потому что позже я не смог реализовать среднее значение отображается на значке значка значка) –

ответ

0

Эта функция вызывается каждый день один раз. он будет вызываться только в том случае, если дата изменится. вызовите эту функцию в appdelegate.

let defaults = NSUserDefaults.standardUserDefaults() 
let date = NSDate() 
let frmt = NSDateFormatter() 
frmt.dateFormat = "YYYY-MM-dd" 
let today = frmt.stringFromDate(date) 

if let savedDate = defaults.objectForKey("today") 
{ 
    if self.compareTwoDates(savedDate as! String, secondDate: today) == false { 
    // perform calculations 
    // this block gets called if the date is changed 
    } 
} else { 
    // perform calculations 
    // this block gets called for the first time only. 
} 
self.defaults.setValue(today, forKey: "today") 
// here we save the today's date for next day's comparison 

И функция сравнения даты

func compareTwoDates(firstDate: String, secondDate: String) -> Bool { 
    let frmt = NSDateFormatter() 
    frmt.dateFormat = "YYYY-MM-dd" 
    let date_first = frmt.dateFromString(firstDate) 
    let date_second = frmt.dateFromString(secondDate) 
    return (date_first?.isEqualToDate(date_second!))! 
} 
+0

Я должен положить его прямо в appdelegate вот так: –

+0

Спасибо за ответ! Я должен положить его прямо в делегат приложения или внутри функции, потому что он дает много ошибок: https://www.dropbox.com/sh/yxivxlixabvy9ef/AABPD2QeRT3II2Vtap_e_66Ia?dl=0 –

+0

@ NicolaiElhøjNielsen вызывает эту функцию, как этот https : //gist.github.com/duraiganesh0/245713c94e735c82f9b85cbe0ffe6640 –