Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将JSON字符串转换为NSDictionary时,并非所有键都有效_Ios_Objective C_Json_Nsdictionary_Nsdata - Fatal编程技术网

Ios 将JSON字符串转换为NSDictionary时,并非所有键都有效

Ios 将JSON字符串转换为NSDictionary时,并非所有键都有效,ios,objective-c,json,nsdictionary,nsdata,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

我使用以下代码将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”]
中开始崩溃。在inspector中查看
值时,我看到以下内容:

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)
进一步展开时,应该是
名称
版本
的键都显示为类型
(\uu NSCFConstantString*)

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

关于是什么导致了这种情况,或者有没有更好的方法将json字符串转换成字典


更新:我将“名称”和“版本”改为“游戏”和“gersion”,效果非常好。

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

我们仍然不确定是什么导致设备进入这种状态,因为多次运行“Clean Build Folder”,关闭并重新启动XCode,重新启动iPad对我们没有任何帮助


我考虑过删除这个问题,但由于我们不知道是什么原因导致了这个问题,我想将来可能会有其他人遇到这个问题,这个答案可能会对他们有所帮助。如果有人能提供一些关于可能导致这种情况的见解,我很乐意接受你的回答。

以什么方式工作?ArrYs是通过索引而不是键访问的,所以您的代码总是错误的。对不起,这是一个字典数组。我将编辑我的问题。为什么要使用JSON字符串文字而不是字典文字的Objective-C数组文字?无论如何,记录数组,或者在调试器中执行
po value
@Ken Thomases这是来自服务器的数据,我只需要解析它。为了进行测试,我记录了JSON并复制了字符串,因此我不需要从服务器上连续获取它。1)Xcode调试器的变量检查器非常不可靠。在控制台窗口中使用NSLog或键入
po
——永远不要相信调试器的显示。2) 如果数据真的像那样乱七八糟(而且它不是调试器工件),那么你就有一个坏的存储错误(僵尸)。你有没有在Xcode 12.1中再次遇到这种情况?在x/y绘图场景中,我得到的是一个双倍值的“(无摘要)”,而不是另一个。