为什么RKNSJSONSerialization在iOS 6上崩溃?

问题描述:

我在iOS 6上看到了RKNSJSONSerialization中的崩溃 - 而不是iOS 7中。我使用RestKit 0.20.3,它对我来说发生得相当一致。甚至当我提出同样的要求,并得到iOS的6/7相同的响应,它适用于iOS 7罚款,但崩溃在iOS 6为什么RKNSJSONSerialization在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。

我异型与僵尸工具应用程序,并发现这一点:

“一个Objective-C消息被发送到的地址a解除分配的‘CFString字符串(不可变)’对象(僵尸):0x16851250”

我做错了什么?

+0

也许你有某种僵尸问题。 –

+0

不知道这会有所帮助,因为它是RestKit的一部分,但不是它应该是:'return [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];'? – btomw

+0

@btomw感谢您的建议,但我不认为这是问题(请参阅更新的代码)。 –

我解决了这个问题。问题是我的JSON中有重复的键,而iOS 6无法处理它。解决方法是在尝试使用iOS 6上的NSJSONSerialization解析它之前,从JSON中删除重复的键。显然,Apple已经在iOS 7上解决了这个问题,因为它不会在那里崩溃。

相关:NSJSONSerialization bug?

这似乎是一个错字。

假设NSError类型的对象叫做error,调用JSONObjectWithData:需要一个指针指针作为最后一个参数,即&

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

谢谢 - 我用更多的代码更新了问题,以显示RestKit的确在传递指针指针。 –

+0

当然,如果在处理“错误”的地方出现错误,那么可以这样做。 –