В одном из моих приложений я загружал огромное количество данных. Я определенно не могу ожидать, что пользователь будет держать приложение на переднем плане, пока данные не будут загружены. Я просто использую следующий код для загрузки данных, пока приложение находится в фоновом режиме. Работает нормально: -)
Пожалуйста, выполните следующие шаги:
1) использовать следующую строку в заголовочном файле ViewController
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
Синтез в файл .m.
2) в ViewDidLoad назначьте UIBackgroundTaskIdentifier как:
self.backgroundTask = UIBackgroundTaskInvalid;
3) Используйте следующую строку кода, здесь я просто продолжаю метод getDataFromServer внутри beginBackgroundTaskWithExpirationHandler: block.
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
/* Here your downloading Code, let say getDataFromServer method */
[self getDataFromServer]; // Its dummy method
/* Your downloading Code End Here */
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
});
4) Если вы хотите проверить оставшееся время для загрузки данных в фоновом режиме, включите следующую строку в applicationDidEnterBackground: (UIApplication *) метод делегата приложения AppDelegate:
NSLog(@"Background time remaining = %.1f seconds", [UIApplication sharedApplication].backgroundTimeRemaining);