Уведомление о толчке должно поступать с сервера где-то. Я думаю, что вы ищете опрос с локальным уведомлением, если вы хотите, чтобы приложение выполняло работу. Недостатком этого является то, что приложение должно запускаться для его опроса. Я рекомендую посмотреть this WWDC Session, чтобы узнать больше о том, как это работает. Для того, чтобы начать запрос делать опрос, вы могли бы сделать что-то вроде этого:
В интерфейсе:
@property (nonatomic, retain) NSTimer *timer;
И в реализации:
-(void)someMethodSomewhere
{
// Create a timer and automatically start it.
self.timer = [NSTimer scheduledTimerWithTimeInterval:10.0f // some number of seconds
target:self
selector:@selector(checkStatus)
userInfo:nil
repeats:YES];
}
-(void)checkStatus
{
// Perform request, check course status
if (/* course status is open */)
{
UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.alertBody = @"The course is now open";
notification.fireDate = [NSDate date];
[[UIApplication sharedApplication]presentLocalNotificationNow:notification];
// Stop the timer
[self.timer invalidate];
}
}
Edit
Чтобы запустить его в фоновом режиме, вы, вероятно, должны прочитать this document. Результатом является то, что вам нужно переопределить селектор application:performFetchWithCompletionHandler:
на AppDelegate и оттуда вызвать метод checkStatus
сверху. Однако вы не можете контролировать, как часто это будет вызвано. Это работа ОС и в некоторой степени предпочтения пользователя. В конце обработки обязательно вызовите обработчик завершения.
Вы также должны установить минимальный интервал для выборки. В вашем приложении application:didFinishLaunchingWithOptions:
, вам нужно добавить что-то вроде этого:
-(BOOL)application:(UIApplication*)app didFinishLaunchingWithOptions:
{
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
и предполагая код из выше также в AppDelegate:
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
{
[self checkStatus];
completionHandler(UIBackgroundFetchResultNewData);
}
Вы также должны установить свойство в файле Info.plist вашего приложения. Вам нужно будет добавить ключ UIBackgroundModes
с значением fetch
.
Но может ли таймер запускаться, когда приложение закрывается пользователем? – Solistice
@ Солистика См. Мое редактирование. – ahruss