iOS 9.2 因 [[CJSONDeserializer deserializer] deserializeAsDictionary 崩溃:
Posted
技术标签:
【中文标题】iOS 9.2 因 [[CJSONDeserializer deserializer] deserializeAsDictionary 崩溃:【英文标题】:iOS 9.2 crash with [[CJSONDeserializer deserializer] deserializeAsDictionary: 【发布时间】:2016-03-29 01:46:51 【问题描述】:当我在 ios 8.4 和 9.2 上运行以下代码时,我得到一个 808 字节的 NSData 对象 jsonData
:
NSData *jsonData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];
但是,如果我随后将此 NSData 对象输入 CJSONDeserializer,我会在 iOS 9.2 中崩溃,但在 iOS 8.4 中会出现 NSDictionary。例如
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:nil];
注意:在崩溃的那一行,NSData 对象似乎发生了变化——例如这里:
- (id)deserializeAsDictionary:(NSData *)inData error:(NSError **)outError
if ([self _setData:inData error:outError] == NO)
inData
在 iOS 8.4 中为 808 字节,但在 iOS 9.2 中如下所示:
由于地址奇数,我认为这意味着对象不正确(可能被覆盖?)。
我试图在没有应用程序传输安全开销的情况下找出问题,因此我将 NSAppTransportSecurity 设置如下:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我还更新了 CJSONDeserializer 到最新版本。
任何其他建议可能是什么问题。
【问题讨论】:
崩溃日志显示的原因是什么?我相信结果不是有效的 json 格式。 【参考方案1】:尝试输入错误对象
NSError *error = nil;
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
【讨论】:
以上是关于iOS 9.2 因 [[CJSONDeserializer deserializer] deserializeAsDictionary 崩溃:的主要内容,如果未能解决你的问题,请参考以下文章
Crashlytics - 发布新版本后,我收到了来自 ios 9.1-9.2 的大量崩溃报告
带有 iOS 9.2 dataWithContentsOfURL 的错误 Xcode 7.3