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


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

- (void)applicationDidEnterBackground:(UIApplication *)application  

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

3 13

3 ответа:

Один из способов выполнить некоторые операции, которые продолжаются в фоновом режиме, - создать отдельный поток для загрузки. Внутри потока заключите операции загрузки в скобки между вызовами beginBackgroundTaskWithExpirationhandler: и 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];

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

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

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

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

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

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