将JSON String转换为NSDictionary时,并非所有键都有效

时间:2015-02-13 19:06:05

标签: ios objective-c json nsdictionary nsdata

我使用以下代码将JSON字符串文字转换为包含每个项目的NSDictionary的数组:

NSString* json = @"[{\"name\":\"Item 1\",\"id\":\"999\",\"lang\":\"en\",\"type\":\"A\",\"version\":15}]";
NSData* data = [json dataUsingEncoding:NSUTF8StringEncoding];
NSArray* values = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

从我的测试设备中删除应用后,应用在for循环values[i][@"name"]中尝试访问时开始崩溃。在检查器中查看values时,我会看到以下内容:

values = (NSArray *) @"1 object"
    [0] = (__NSDictionaryM *) 5 key/value pairs
        [0] = (no summary) : @"Item 1"
        [1] = @"id" : @"999"
        [2] = @"type" : @"A"
        [3] = (no summary) : (long)15
        [4] = @"lang" : (no summary)

进一步展开后,应该nameversion的密钥都显示为(__NSCFConstantString *)

类型

这是在从设备中删除应用之前的工作,并且没有对代码的这一部分进行任何更改。

关于可能导致此问题的任何想法,或者更好的方法将json字符串转换为字典?

更新:我更改了#34;名称"和"版本"到#34;游戏"和" gersion",它运作得很好。

1 个答案:

答案 0 :(得分:1)

尝试调试几个小时之后,我的主管和我决定重启我正在开发的MacBook。这解决了运行时问题,我的问题中的代码再次按预期工作。

我们仍然不确定导致设备进入此状态的原因,因为多次运行“Clean Build Folder”,关闭并重新启动XCode,重新启动iPad并没有帮助我们。

我考虑过删除这个问题,但由于我们不知道是什么导致这个问题,我认为其他人可能在将来遇到这个问题,这个答案可以帮助他们。如果有人能够对可能带来这种情况的内容提供一些见解,我将很乐意接受你的回答。