Существует только несколько вариантов использования, которые вы можете реализовать на переднем плане. Если вы не хотите, чтобы ваше заявление было отклонено в ходе проверки, не используйте хаки. Конечно, вы можете использовать NSTimer в фоновом режиме, но он должен быть создан в потоке (runloop) фоновой задачи. Но эта фоновая задача живет только на определенное количество времени, поэтому ваш таймер должен срабатывать в течение этого периода. Другими словами, ваша первая цель - создать фоновое задание, и только тогда вы можете использовать таймер. Есть несколько случаев, подходящих для вашей цели (которые позволяют вам создать эту задачу): 1.Монитор значительных изменений местоположения или региона. 2. Извлечь данные (iOs 7). Поэтому, пожалуйста, обратитесь к
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"BG fetch in action");
//the only 30 sec is allowed to perform all your actions
//during this period you can each second track GPS data
[self performSelector:@selector(finishBackgroundFetch:) withObject:completionHandler afterDelay:27];
[[NSNotificationCenter defaultCenter] postNotificationName:@"StartMyGPSRoutine" object:nil];
}
-(void)finishBackgroundFetch:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"BG fetch completion handler");
[[NSNotificationCenter defaultCenter] postNotificationName:@"ForceStopAnyBackgroundTaskCreatedWithStartMyGPSRoutine" object:nil];
completionHandler(UIBackgroundFetchResultNewData);
}
делегата приложения - это будет полезно в вашем случае, а также будет отслеживать значительные изменения местоположения. Вы должны поставить в любом месте:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(setMinimumBackgroundFetchInterval:)]) {
NSLog(@"Set Force BG interval to %ld", interval);
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:interval];
}
В моем случае я получать данные GPS каждые 5 мин так 27sec, чтобы выполнить эту задачу не так долго. В любом случае вы можете играть с временными интервалами с помощью XCode. Пожалуйста, см. Главное меню-> Отладка-> Имитировать фоновый выбор
Вы читали об управлении фоновой информацией в iOS 7 (и почему вы молча записываете данные о местоположении?) – Wain
NSTimer работает именно так. Он останавливается, когда приложение находится в фоновом режиме. – dmitri