AFNetworking 后台会话 KVO 错误

Posted

技术标签:

【中文标题】AFNetworking 后台会话 KVO 错误【英文标题】:AFNetworking Background Session KVO Error 【发布时间】:2016-03-10 01:50:16 【问题描述】:

有时我的应用会在启动时崩溃。

似乎与后台 NSURL Session Activity 失败有关。此消息在 Crashlytics 日志中的出现相当一致:

_block_invoke line 233 $ Error Domain=NSURLErrorDomain Code=-997 "Lost connection to background transfer service"

我不知道如何在 xCode 中调试此问题,因为我无法在我的测试设备连接到我的计算机时导致它发生。

我没有在我的应用程序中使用 KVO;也许这是 AFNetworking 本身的问题?

以下是 Crashlytics 报告的崩溃消息:

Fatal Exception: NSInternalInconsistencyException
An instance 0x14f97ef00 of class __NSCFBackgroundDataTask was deallocated while 
key value observers were still registered with it. 
Current observation info: <NSKeyValueObservationInfo 0x14f97f320> ( <NSKeyValueObservance 0x14f841ea0: Observer: 0x14e777340, Key path: countOfBytesReceived, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x14e650010> <NSKeyValueObservance 0x14e6e1770: Observer: 0x14e777340, Key path: countOfBytesExpectedToReceive, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x14f81c090> <NSKeyValueObservance 0x14f80e030: Observer: 0x14e777340, Key path: countOfBytesSent, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x14f97e880> <NSKeyValueObservance 0x14e5ca9c0: Observer: 0x14e777340, Key path: countOfBytesExpectedToSend, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x14f97cf20> )

任何帮助将不胜感激。

【问题讨论】:

我认为这可能是由重复的 GET 请求引起的。 见github.com/AFNetworking/AFNetworking/issues/3380,这可能对你有帮助。 我认为这将在他们发布 AFNetworking 3.1.1 时得到修复(3.1.0 是当前版本。)我们将向后移植这个修复:github.com/AFNetworking/AFNetworking/commit/… 添加这个以防它帮助其他人找到这个 SO 问题 【参考方案1】:

见https://github.com/AFNetworking/AFNetworking/issues/3380

我认为这会在他们发布 AFNetworking 3.1.1 时得到解决(3.1.0 是当前版本。)

Backporting https://github.com/AFNetworking/AFNetworking/commit/ff228fad3addd141cc668891b6c3bb9b1b1c4271.patch 为我解决了这个问题。

添加这个以防其他人找到这个问题

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x7fdcb4d099f0 of class __NSCFBackgroundDataTask was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x60000002da80> (
<NSKeyValueObservance 0x60000005b2d0: Observer: 0x600000283110, Key path: countOfBytesReceived, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000005b300>
<NSKeyValueObservance 0x60000005b660: Observer: 0x600000283110, Key path: countOfBytesExpectedToReceive, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000005b690>
<NSKeyValueObservance 0x60000005b870: Observer: 0x600000283110, Key path: countOfBytesSent, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000005b8a0>
<NSKeyValueObservance 0x60000005ba20: Observer: 0x600000283110, Key path: countOfBytesExpectedToSend, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000005ba50>

【讨论】:

以上是关于AFNetworking 后台会话 KVO 错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 扩展的 AFNetworking 后台会话配置

AFNetworking 3.0 下载后台模式

AFNetworking 2.0 是不是支持后台任务? - IOS 7

ios AFNetworking---cookie(session)保持登陆会话状态

KVO 更新 UITableViewCell

在 AFNetworking 重新连接网络时恢复所有上传任务