Как я могу получить уведомление, когда оно достигает определенного времени суток в приложении для iPhone? - PullRequest
0 голосов
/ 23 июля 2010

Я работаю над приложением, которому нужен метод для вызова в определенное время (если быть точным через 15 минут после часа). Есть ли способ сделать это, не затрачивая тонны ресурсов процессора и батареи? Я пробовал искать и просто нигде не могу найти ответ.

Ответы [ 2 ]

4 голосов
/ 23 июля 2010

Если вам нужно, чтобы это произошло, когда ваше приложение не запущено, посмотрите UILocalNotification в iOS 4.0. Неясно, работает ли ваше приложение в тот момент, когда вам нужно это уведомление, или нет, но в любом случае этот класс должен указывать вам правильное направление.

http://developer.apple.com/iphone/library/documentation/iPhone/Reference/UILocalNotification_Class/Reference/Reference.html#//apple_ref/occ/cl/UILocalNotification

4 голосов
/ 23 июля 2010

Они сделали это действительно легко.Выделите NSTimer и инициализируйте его датой запуска, используя:

-(id)initWithFireDate:(NSDate *)date
      interval:(NSTimeInterval)seconds
      target:(id)target
      selector:(SEL)aSelector
      userInfo:(id)userInfo
      repeats:(BOOL)repeats

, затем добавьте его в цикл выполнения, используя:

-(void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode

в цикле выполнения, например, [NSRunLoop currentRunLoop].Не знаю, разбудит ли это устройство или не даст ему заснуть.

edit пример кода

// start in 5 minutes
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:300];

// fire every minute from then on
NSTimer *t = [[NSTimer alloc]
    initWithFireDate:date
    interval:60
    target:self
    selector:@selector(stuff:) // -(void)stuff:(NSTimer*)theTimer
    userInfo:nil
    repeats:YES
];

// make it work
[[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];

и

-(void)stuff:(NSTimer*)theTimer
{
    if ( done ) [theTimer invalidate];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...