如何在xcode的后台重复触发一个进程

时间:2014-11-20 12:42:48

标签: ios xcode xcode5

我正在使用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被调用。

1 个答案:

答案 0 :(得分:0)

您是否启用了后台获取模式?单击项目目标,然后在功能选项卡下选择" background fetch"。

理论上你也应该设置[application endBackgroundTask:bgTask]。这听起来像你知道,但如果它永远不会结束,iOS将最终杀死你的应用程序。