Продолжить загрузку в фоновом режиме

Я создаю приложение, в котором я загружаю некоторые данные с сервера. Во время работы в фоновом режиме я хочу, чтобы это соединение продолжало работать, чтобы можно было загрузить данные. Я знаю, что есть метод в appDelegate

- (void)applicationDidEnterBackground:(UIApplication *)application  

который вызывается, когда приложение вводит фон. Но поскольку соединение создается в viewController, как его можно управлять в appDelegate?
Также есть/есть другие пути (ы), это можно сделать? Я прошел через эту ссылку, но есть ли что-то простое реализовать?

Ответ 1

Один из способов сделать некоторые операции, которые продолжаются в фоновом режиме, - создать отдельный поток для загрузки. Внутри потока скопируйте свои операции загрузки между вызовами в startBackgroundTaskWithExpirationHandler: и endBackgroundTask. Вам не нужно проверять, работаете ли вы в фоновом режиме или нет, вы всегда вызываете эти два метода.

// Tell iOS this as a background task in case we get backgrounded
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] 
          beginBackgroundTaskWithExpirationHandler:NULL];

//----------------------------------------------
// Perform your download operations here
//----------------------------------------------
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

// Tell iOS that we are done with stuff that needed to keep going even if backgrounded    
[[UIApplication sharedApplication] endBackgroundTask:taskId];

Ответ 2

[править] Извините, я был некорректен, как было указано в комментариях, вы можете продлить срок, в течение которого вы должны выполнять операции один раз/до того, как ваше приложение перейдет в фоновый режим. Вот Официальная документация Apple

Ответ 3

Я не знаю, как вы точно обрабатываете данные. Но вы можете взглянуть на ASIHTTPRequest. Это очень просто и просто, и работает с ARC, если вы устанавливаете флаги компилятора в -fno-objc-arc. При этом вам нужно использовать только

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setShouldContinueWhenAppEntersBackground:YES]; //For iOS 4.0 and up 

И это работает.

Здесь вы можете увидеть, как работает ASIHTTPRequest

Надеюсь, что это поможет!