【问题标题】:SIGSEGV when calling [NSURLSessionDataDelegate resume]调用 [NSURLSessionDataDelegate resume] 时的 SIGSEGV
【发布时间】:2014-04-22 15:15:31
【问题描述】:

我最近使用 iOS 7 上的新 NSURLSession 完成了我的第一个项目。

我构建了一个应用程序来探索 NSURLSession 的整个 API,实现各种任务: - 数据任务 - 下载任务 - 上传的任务

我还使用后台会话实现了后台上传。经过数小时的调试和反复试验,我终于达到了整个应用程序可以正常工作的地步——对我来说就是这样。我将它发布给少数测试人员(

我的代码的某个部分 - 在一些不相关的操作之后 - 负责恢复后台会话中可用的当前上传任务:

    [[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

有什么想法吗?有什么提示吗?

提前致谢! 泽

【问题讨论】:

标签: ios objective-c nsurlsession nsurlsessionconfiguration nsurlsessiontask


【解决方案1】:

从 iOS 7.1 开始,我发现了同样的问题。如果您在状态为 NSURLSessionTaskStateCompleted 的任务上调用 resume(也可能是 NSURLSessionTaskStateCanceling),则会发生崩溃。我认为这是 iOS 7.1 中引入的一个错误,因为在 iOS 7 下,简历被忽略了。

我所做的如下:

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

这应该可以防止崩溃的发生。无论如何,只有暂停的任务才能恢复。

这仍然令人沮丧,因为它在 iOS 7 下运行了几个月都没有出现问题,而现在发布的应用程序因此会产生很多崩溃。

【讨论】:

  • 像魅力一样工作!非常感谢!
  • 我的雷达已关闭,这在 iOS 8 中已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多