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

Xamarin iOS (9.2):手势在模拟器中不起作用

Calabash-ios 控制台无法以 DEVICE_TARGET='iPhone 5 (9.2)' 启动

导航栏在iOS 9.2中显示错误的导航项

我可以在 Xcode 9.2 中为 iOS 12 开发应用程序吗?