【发布时间】:2014-09-05 05:39:53
【问题描述】:
为什么通过它的配置连接一个 NSURLSession 需要很长时间,以至于它会在启动时崩溃应用程序:'未能及时启动'?
我在许多 iOS 应用程序中看到过类似的崩溃转储,包括 NY Times iOS 应用程序和 Evernote 应用程序。
[NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:queue]
这是堆栈跟踪:
Thread 0:
0 libsystem_kernel.dylib 0x3afb7aa0 semaphore_wait_trap + 8
1 libdispatch.dylib 0x3af04d3d _dispatch_semaphore_wait_slow + 173
2 CFNetwork 0x2febd8e3 -[__NSCFBackgroundSessionBridge setupBackgroundSession] + 379
3 CFNetwork 0x2fef18a1 +[__NSCFSessionBridge bridgeForConfiguration:session:queue:] + 153
4 CFNetwork 0x2fef6497 -[__NSCFURLSession initWithConfiguration:delegate:delegateQueue:] + 395
5 CFNetwork 0x2fef6eb7 +[__NSCFURLSession sessionWithConfiguration:delegate:delegateQueue:] + 295
【问题讨论】:
-
我也面临同样的堆栈跟踪问题。无法找出根本原因。 @Rayyan,你能解决这个问题吗?
-
我将调用移动到在后台线程上异步运行,以便操作系统不会因此而终止应用程序。但是,sessionWithConfiguration 调用随后会挂起并且永远不会返回。它很少发生,但是一旦设备进入不良状态,它就会一直挂在该设备上。 @kkumpavat,这也是你所看到的吗?我怀疑这是 iOS 中的错误。
-
是的,我也怀疑它是 iOS 中的一个错误。它很少发生,一旦 iOS 进入那种糟糕的状态,每次执行都会挂在 'sessionWithConfiguration:delegate:delegateQueue:' 处。此外,将调用移动到异步运行也无济于事,因为会话永远不会被初始化,我们将无法执行网络任务。
-
我似乎在 iOS 8.3 上也遇到了这个问题。您是否曾经制定过解决方案或解决方法?我想我可能只是在后台队列中执行此操作,因为我不需要在启动时立即使用它。
-
我在 iOS 8.3 上也有这个问题(以前在 8.2 上可以正常工作)。基本上,如果我正在进行大文件后台上传并且应用程序被终止,它将始终在重新启动时挂起,直到我重新启动设备。我目前的解决方法是在 NSUserDefaults 中存储一些标志,并在收到 URLSessionDidFinishEventsForBackgroundURLSession 通知时重置它们。之后,调用 sessionWithConfiguration 是安全的。您可能永远不会收到通知,并且我的标志将永久禁用该服务。
标签: ios objective-c crash nsurlsession