NSURLSession:后台崩溃,因为没有调用上传委托
Posted
技术标签:
【中文标题】NSURLSession:后台崩溃,因为没有调用上传委托【英文标题】:NSURLSession: background crash because upload delegates aren't called 【发布时间】:2014-09-25 13:17:11 【问题描述】:我一直在尝试使用NSURLSession的后台上传,但偶尔会出现这个崩溃
Sep 25 10:01:48 ipad backboardd[29] <Warning>: MyApp[11829] has active assertions beyond permitted time:
(
<BKProcessAssertion: 0x166b1770> identifier: com.apple.nsnetworkd.handlesession process: MyApp[11829] permittedBackgroundDuration: 30.000000 reason: backgroundDownload owner pid:8440 preventSuspend preventThrottleDownUI preventIdleSleep preventSuspendOnSleep
)
调试代码,我发现当崩溃发生时,application: handleEventsForBackgroundURLSession:completionHandler:
方法被调用,在那里我重新创建会话并存储完成处理程序,如Apple Documentation reccomends,但任务端的委托从未被调用,URLSessionDidFinishEventsForBackgroundURLSession:
也不是,这解释了崩溃,因为我在 NSURLSession 委托中处理完上传结束后调用了完成处理程序。
谁能告诉我为什么不召集代表?
【问题讨论】:
我发现很难获得有关后台任务正在做什么的良好信息。您是否查看了设备控制台日志以获取线索?有时会出现错误消息。 是的,我从设备控制台收到了这条消息,xCode debug 防止了这种崩溃的发生,所以我发现调试它的唯一方法是使用 NSLog 和设备控制台 【参考方案1】:我发现了问题,我的代码中的一个错误导致我有时会调用完成处理程序两次。下次唤醒应用程序时,委托从未被调用,因此完成处理程序也没有被调用,这导致了崩溃
【讨论】:
以上是关于NSURLSession:后台崩溃,因为没有调用上传委托的主要内容,如果未能解决你的问题,请参考以下文章