Ответ 1
Вы просто вызываете beginBackgroundTaskWithExpirationHandler:
, когда ваше приложение находится в правом переднем плане, когда вы начинаете процесс загрузки. Обратите внимание, что вы должны сохранить возвращаемое значение в свойстве ivar/:
@property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskID;
@synthesize backgroundTaskID;
...
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
self.backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
// Cancel the connection
[connection cancel];
}];
Это позволит вашему приложению продолжать работать, если он будет отправлен на задний план во время загрузки. Затем в ваших методах делегата, которые означают завершение загрузки, вы должны поместить соответствующий endBackgroundTask:
:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// Handle the error
...
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Save the downloaded data
...
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID];
}