Вызов метода в NSDate - PullRequest
       2

Вызов метода в NSDate

1 голос
/ 31 марта 2011

Я пытаюсь вызвать метод в определенное время и дату (используя NSDate), но не могу понять, как это сделать.

Я не хочу использовать NSTimer, потому что это приостанавливается, когда приложение переходит в фоновый режим или закрывается. Я также не хочу запускать один в фоновом режиме, потому что это решает только половину проблемы и, по моему мнению, является расточительным способом сделать это. Я подумал, что если я смогу запустить метод на NSDate в будущем, когда приложение снова откроется, я смогу увидеть, прошла ли текущая дата дату срабатывания, и поэтому, вызывать ли его немедленно или продолжать ждать.

Полагаю, я ищу что-то вроде UILocalNotification без уведомления.

Я надеюсь, что есть простой способ сделать это, которого я просто не могу найти, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Сначала мне показалось, что вы хотите метод performSelector:withObject:afterDelay:. Таким образом, у вас есть NSDate *date, когда вы хотите вызвать селектор.

NSTimeInterval delay = [date timeIntervalSinceNow];
[self performSelector:@selector(methodToFire) withObject:nil afterDelay:delay];

Конечно, это не доживет до вашего времени выполнения, поэтому вы в значительной степени обрисовали в общих чертах, что вам нужно сделать уже. Вы просто сохраняете свою дату где-то (есть МНОГИЕ способы сделать это), а затем проверяете это в applicationDidBecomeActive. Вы можете использовать тот же метод timeIntervalSinceNow, который я использовал выше. (Если дата прошла, интервал будет отрицательным.)

if ( [date timeIntervalSinceNow] <= 0 ) {
    // do something...
}
1 голос
/ 31 марта 2011

Почему бы вам просто не использовать NSTimer, а в обратном вызове ...

- (void)applicationDidBecomeActive:(UIApplication *)application

проверить время и дату и обновить таймер или вызвать функцию, если дата прошла,

...