2014-11-20 4 views
0

Я работаю над приложением в xcode-5, мне нужно загрузить некоторые данные в фоновом режиме, мне нужно, чтобы код кода повторялся до тех пор, пока устройство не завершит работу фоновый процесс. Я могу сделать это один раз, но мне нужно повторять снова и снова, чтобы я мог проверить подключение и выполнить загрузку. Я делаю то же самое, когда приложение входит в активный режим. В настоящее время я использую Таймеры со следующим кодом:Как повторно запускать процесс повторно в фоновом режиме в xcode

- (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't вызывается.

+0

Если у кого-то есть лучшее альтернативное решение, которое выполнило бы мои требования, то, пожалуйста, предложите. – User6391

ответ

0

Включили ли вы режим фоновой выборки? Нажмите на цель проекта, и на вкладке «Возможности» выберите «background fetch».

Теоретически вы также должны установить [application endBackgroundTask: bgTask]. Похоже, вы знаете, но если это никогда не закончится, iOS закончит убийство вашего приложения.

+0

Спасибо за ваш ответ. Да, я включил backgroundFetch. Я выяснил, что таймер не вызывается, когда он был вызван внутри асинхронной рассылки. Поэтому я инициировал его за пределами работы, и я также сделал его недействительным в beginBackgroundTaskWithExpirationHandler:^{}; оба таймера работают так, как ожидалось, и приложение dosnt тоже падает, Но у меня есть замысел, что это не правильный и надежный способ, поэтому, если у вас есть предложения, пожалуйста, помогите. – User6391

Смежные вопросы