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

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

- (void)applicationDidEnterBackground:(UIApplication *)application  

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

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

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

Другие вопросы по тегам