无法从 NSDictionary 获取值是 ios

Posted

技术标签:

【中文标题】无法从 NSDictionary 获取值是 ios【英文标题】:Unable to get values from NSDictionary is ios 【发布时间】:2012-12-20 02:59:38 【问题描述】:

我的 NSDictionary 输出与 NSLog 显示:


    "filename" : "mytest100.txt",
    "filedesc" : "File Description here",
    "data" : [

    ]
 

但是当我这样做时:NSString *filename = [dict objectForKey:@"filename"]; 它会在这条线上崩溃。

我做错了什么?这似乎微不足道。

【问题讨论】:

当它崩溃时你得到什么错误信息? 你的字典叫dict?没有大写或拼写错误? 正确,没有拼写错误。错误消息是:[__NSCFString objectForKey:]: unrecognized selector sent to instance 0Xec95e10.如果它指的是“文件名”,它肯定存在,它没有多大意义。 听起来dict 是一个字符串而不是字典。 【参考方案1】:

试试这个:

NSDictionary *d = [NSDictionary dictionaryWithObject:@"foo" forKey:@"bar"];
NSLog(@"%@", d);

输出是:


    bar = foo;

注意到键或值中没有记录引号?除非您的键和值的格式为 @"\"foo\"",否则我猜您那里并没有真正的字典。

我会把钱放在代表 JSON 的字符串上。崩溃是因为 objectForKey: 是字符串上无法识别的选择器。

【讨论】:

【参考方案2】:

根据您收到的错误消息,dict 变量不包含 NSDictionary,而是和 NSString

跟踪您的代码,寻找您分配 dict 变量的位置,您肯定会看到它被设置为不是字典的东西。

【讨论】:

嗯,它可能是,但我怀疑不是。下面是执行代码: for(NSDictionary dict in array) NSLog("DICTIONARY IS: %@", dict); NSString *filename = [dict objectForKey:@"filename"]; 数组来自:NSArray *array = [[NSArray alloc] initWithContentsOfFile:myfilename]; @IIS7Rewrite,如果你不同意,那么在你执行objectForKey之前运行这个命令NSLog(@"class -> %@", [dict class]); 我不反对,我只是想找出我的错误是什么:) 输出是:class -> __NSCFtring 所以,你们是对的。你能告诉我如何解决这个问题吗?将字符串转换为有效的 NSDictionary?再次感谢您的回答。 @IIS7Rewrite,您在 OP 中发布的字符串看起来像 JSON。如果您要存储到光盘的内容是 JSON,那么您需要反序列化它。我在 SBJson 上很幸运,但还有其他的。 没错,我将一个 JSON 字符串存储在一个文件中并读回它并尝试解析它。问题是我不太了解Objective C,我刚开始,我的JSON实际上比我在这里展示的更复杂,它有嵌套的其他对象数组,所以我不确定如何解析JSON转换为具有简单属性的复杂对象以及具有复杂对象的数组。我刚开始使用一些简单的属性并被困在这里。我希望从 JSON 中获取 NSDictionary,然后将每个属性读取为 NSString 或 NSArray。

以上是关于无法从 NSDictionary 获取值是 ios的主要内容,如果未能解决你的问题,请参考以下文章

无法创建 Plist 文件。 iOS+NSDictionary+JSON

iOS 开发,NSDictionary 和 Model 哪个好

无法从 JSON 中获取值(无法将类型“__NSCFNumber”(0x7fff87b9c520)的值转换为“NSDictionary”(0x7fff87b9d5b0))

从 NSDictionary 访问数据

发送到实例的 iOS 无法识别的选择器 - 将 NSDictionary 添加到 NSMutableArray

从 NSDictionary 中检索数据,并在值周围加上引号?