SIGSEGV при вызове [NSURLSessionDataDelegate резюме]
Я недавно завершил свой первый проект, используя новую NSURLSession, доступную на iOS 7.
Я создал приложение для изучения всего API NSURLSession, реализуя все виды задач: - Задачи данных - Задачи загрузки - Загруженные задачи
Я также реализовал фоновые загрузки с использованием фоновых сессий. После многих часов отладки и внедрения проб и ошибок я наконец пришел к точке, когда все приложения работают без проблем - для меня это так. Я выпустил его для небольшого числа тестеров (< 5), и некоторые из них столкнулись с ошибкой, которую я не могу воспроизвести или даже отследить.
Определенная часть моего кода - после некоторых несвязанных операций - отвечает за возобновление текущих задач загрузки, доступных в фоновом сеансе:
[[appDelegate getNSURLSessionForBackgroundTransfers] getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
for(NSURLSessionUploadTask *task in uploadTasks) {
[task resume];
}
Время от времени приложение вылетает со следующим исключением в моих журналах (я использую хоккейное приложение):
SIGSEGV
На:
0 libdispatch.dylib 0x3ba87772 _dispatch_async_f + 10
1 CFNetwork 0x30a5b86f -[__NSCFBackgroundSessionTask _onqueue_connection_resume] + 92
2 Memoir Beta 0x00231e85 __55-[PhotoBinariesUploader runCodeEvenIfBackgroundMode:]_block_invoke_3 (PhotoBinariesUploader.m:553)
3 CFNetwork 0x30a848c5 __50-[__NSCFURLSession getTasksWithCompletionHandler:]_block_invoke246 + 14
Есть идеи? Любые намеки на то, что это может быть?
Заранее спасибо! Ze
1 ответ
Я видел ту же проблему, начиная с iOS 7.1. Сбой происходит, если вы вызываете возобновление для задачи с состоянием NSURLSessionTaskStateCompleted (возможно, для NSURLSessionTaskStateCanceling тоже). Я думаю, что это ошибка, представленная в iOS 7.1, потому что в iOS 7 резюме игнорировалось.
Я сделал следующее:
if (task.state == NSURLSessionTaskStateSuspended) {
[task resume];
}
Это должно предотвратить сбой. И только задачи, которые приостановлены, могут быть возобновлены в любом случае.
Это по-прежнему разочаровывает, так как он работал без проблем под iOS 7 в течение нескольких месяцев, и теперь выпущенное приложение вызывает много сбоев из-за этого.