我正在使用xcode-5中的应用程序,我需要在后台模式上传一些数据,我需要重复一组代码,直到设备终止后台进程。我能够做一次,但我需要一次又一次地重复,以便我可以检查连接并执行上传。当应用程序进入活动模式时,我做同样的事情。 目前我正在使用具有以下代码的计时器:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[bgrdTimer_ActiveMode invalidate];
bgrdTimer_ActiveMode=nil;
self.backgroundTask=[application beginBackgroundTaskWithExpirationHandler:^{
self.backgroundTask=UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
bgrdTimer_BackGroundMode=[NSTimer scheduledTimerWithTimeInterval:40.00 target:self selector:@selector(repeatUploadProcess_BackGroundMode) userInfo:nil repeats:YES];
});
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[bgrdTimer_BackGroundMode invalidate];
bgrdTimer_BackGroundMode=nil;
bgrdTimer_ActiveMode=[NSTimer scheduledTimerWithTimeInterval:40.00 target:self selector:@selector(repeatUploadProcess_ActiveMode) userInfo:nil repeats:YES];
}
repeatUploadProcess_ActiveMode和repeatUploadProcess_BackGroundMode是包含要重复的代码集的方法
问题是当我使bgrdTimer_ActiveMode无效时,另一个计时器dosn被调用。
答案 0 :(得分:0)
您是否启用了后台获取模式?单击项目目标,然后在功能选项卡下选择" background fetch"。
理论上你也应该设置[application endBackgroundTask:bgTask]。这听起来像你知道,但如果它永远不会结束,iOS将最终杀死你的应用程序。