ОК, я отвечу на свой вопрос.Во-первых, как сказал tc, лучше иметь этот вызов для делегата приложения, чтобы представление в NavigationController можно было закрыть.Во-вторых, отметьте начало фоновой обработки с помощью beginBackgroundTaskWithExpirationHandler:
и завершите его endBackgroundTask:
следующим образом:
.h:
UIBackgroundTaskIdentifier bgTask;
.m:
- (void)sendPhoto:(UIImage *)image
{
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
NSLog(@"Sending picture...");
// Init async NSURLConnection
// ....
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"Picture sent.");
UIApplication *app = [UIApplication sharedApplication];
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}
У вас есть 10 минут, прежде чем iOS закроет ваше приложение.Вы можете проверить это время с [app backgroundTimeRemaining]