为什么在iOS 6上RKNSJSONSerialization会崩溃?

5
我只在iOS 6上看到了RKNSJSONSerialization的崩溃,而在iOS 7上没有。我使用的是RestKit 0.20.3版本,这种情况对我来说相当普遍。即使我为iOS 6/7做出相同的请求并获得相同的响应,它在iOS 7上工作正常,但在iOS 6上崩溃。
以下是崩溃信息 - 它是一个EXC_BAD_ACCESS:http://crashes.to/s/2610b639062 在RestKit的RKNSJSONSerialization中,导致崩溃的相关代码行是返回语句:
+ (id)objectFromData:(NSData *)data error:(NSError **)error
{
    return [NSJSONSerialization JSONObjectWithData:data options:0 error:error];
}

也许这并不是RestKit的问题,而是NSJSONSerialization的问题。 我使用Zombies工具对应用进行了分析,并发现了以下信息:“在地址0x16851250处向一个已释放的‘CFString (immutable)’对象(僵尸)发送了Objective-C消息。” 我做错了什么吗?

可能你遇到了某种僵尸问题。 - Hot Licks
不确定这是否有帮助,因为它是 RestKit 的一部分,但它不应该是:return [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];吗? - btomw
@btomw 谢谢你的建议,但我不认为那是问题(请看更新后的代码)。 - Josh Brown
什么是JSON?有任何未转义的Unicode字符吗? - Wain
2个回答

3
我已经解决了这个问题。问题在于我的JSON中有重复的键,而iOS 6无法处理这种情况。解决方法是在尝试使用NSJSONSerialization对iOS 6进行解析之前从JSON中删除重复的键。显然,苹果在iOS 7上解决了这个问题,因为它在那里不会崩溃。
相关链接:NSJSONSerialization bug?

0

这似乎是一个打字错误。

假设有一个名为error的类型为NSError的对象,调用JSONObjectWithData:需要将最后一个参数作为指针的指针传递,即使用&

return [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

谢谢 - 我已经更新了问题,并添加了更多的代码,以显示RestKit确实传递了指向指针的指针。 - Josh Brown
当然,如果在处理“错误”时出现了错误,那就会这样。 - Hot Licks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接