无法从 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))