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

On:

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

Любые идеи ? Любые намеки на то, что это может быть?

Заранее спасибо! Зе


person user361526    schedule 17.03.2014    source источник
comment
Вы можете взглянуть на это? stackoverflow.com/questions/25311736/   -  person Xcoder    schedule 14.08.2014


Ответы (1)


Я видел ту же проблему, начиная с iOS 7.1. Сбой происходит, если вы вызываете возобновление задачи с состоянием NSURLSessionTaskStateCompleted (возможно, и для NSURLSessionTaskStateCanceling). Я думаю, что это ошибка, появившаяся в iOS 7.1, потому что в iOS 7 резюме игнорировалось.

Я сделал следующее:

  if (task.state == NSURLSessionTaskStateSuspended) {
    [task resume];
  }

Это должно предотвратить сбой. И в любом случае можно возобновить только приостановленные задачи.

Это все еще расстраивает, так как оно работало без проблем под iOS 7 в течение нескольких месяцев, и теперь выпущенное приложение вызывает много сбоев из-за этого.

person Soph    schedule 18.03.2014
comment
Работает как шарм!! Огромное спасибо! - person user361526; 20.03.2014
comment
Мой радар был закрыт, и это исправлено в iOS 8. - person Soph; 12.06.2014