访问 NSDictionary 值 Objective C
Posted
技术标签:
【中文标题】访问 NSDictionary 值 Objective C【英文标题】:Accessing NSDictionary values Objective C 【发布时间】:2015-10-02 05:33:46 【问题描述】:我的字典看起来像这样。
thread = "
\"uuid\": \"e9290344dee38c42782\",
\"site_full\": \"www.independent.co.uk\",
\"main_image\":\"http://www.independent.co.uk/incoming/article10498560.ece/binary/original/39-tea-party-ap.jpg\"
";
[newDict valueForKeyPath:@"thread.main_image"];
我正在尝试这样访问它,但它我可以获得线程之外的所有其他值,但不能获得线程中的嵌套值。感谢任何帮助。
编辑
for (int i=0;i < [responseObject count];i++)
NSDictionary* newDict = (NSDictionary*)responseObject[i];
if ([(NSString*)[newDict valueForKey:@"title"] isEqualToString: @""] || [newDict valueForKey:@"title"]== Nil)
NSLog(@"Image or Title Text is null");
else
NewsFeed* newsData = [NewsFeed new];
newsData.newsSource = [newDict valueForKeyPath:@"thread.site"];
newsData.newsImageLink = [newDict valueForKeyPath:@"thread.main_image"];
//these three work fine
newsData.newsTitle = [newDict valueForKeyPath:@"title"];
newsData.newsText = [newDict valueForKeyPath:@"text"];
newsData.newsDate = [newDict valueForKeyPath:@"published"];
//
NSLog(@"news Source :: %@ \n and news ImageLink:: %@ \n news Title %@ \nnews Text:: %@ \n news Date:: %@ ",newsData.newsSource,newsData.newsImageLink,newsData.newsTitle,newsData.newsText,newsData.newsDate);
[NewsData addObject:newsData];
【问题讨论】:
请说明您尝试了哪些代码,以及它的不足之处。 我已经添加了代码并且响应以数组的形式出现.. 【参考方案1】:看起来存储在索引下标"thread"
处的对象不是假设的NSDictionary
,而是似乎是NSString
的一个实例。
这很微妙,但请查看根级字典中键 "thread"
处对象的打印值:
This is an NSDictionary with one key: "thread"
|
| This is an NSString object, see the quotes (")?
| |
V | Notice that these other keys/values have their quotes (") escaped with backslash?
V |
thread = " V
\"uuid\": \"e9290344dee38c42782\",
\"site_full\": \"www.independent.co.uk\",
\"main_image\":\"http://www.independent.co.uk/incoming/article10498560.ece/binary/original/39-tea-party-ap.jpg\"
";
^
|
Here is the end of the NSString, again we see quotes (")
假设这确实是问题所在,您需要将字符串转换为实际字典,您应该可以轻松做到这一点using JSON serialization which this question/answer should help guide you to do.
一旦这个问题得到纠正,您对valueForKeyPath:
的使用应该是正确的并且应该立即开始工作。
【讨论】:
刚刚检查过...确实是问题所在,建议的链接解决方案正是我想要的..非常感谢..【参考方案2】:试试这个现代的 Objective-C 代码:
NSDictionary *myDict = @@"thread" : @@"uuid" : @"e9290344dee38c42782", @"site_full" : @"www.independent.co.uk", @"main_image" : @"http://www.independent.co.uk/incoming/article10498560.ece/binary/original/39-tea-party-ap.jpg";
NSLog(@"Image = %@", myDict[@"thread"][@"main_image"]);
编辑:在附加调试器屏幕截图的 OP 响应后:
【讨论】:
在调试 po newDict[@"thread"] 如果我这样做,它会列出所有的键和它的值但是当我这样做时 po myDict[@"thread"][@"main_image"]它给出了这个错误错误:警告:无法获取 cmd 指针(替换为 NULL):在此帧中找不到名为“_cmd”的变量执行被中断,原因:尝试取消引用无效的 ObjC 对象或向其发送无法识别的选择器。进程已经返回到表达式求值前的状态。 这对我来说就像一个魅力。请参阅我的调试器附带的屏幕截图。我正在使用 Xcode 7。 正如 Thuggish 上面指出的那样,您似乎没有使用真正的字典,这就是您看不到它工作的原因。如果您尝试使用我的示例字典,它应该可以工作。所以这里的关键是检查您的传入数据并将其更正到正确的字典中。 是的,这就是问题所在..感谢人们的帮助..:)以上是关于访问 NSDictionary 值 Objective C的主要内容,如果未能解决你的问题,请参考以下文章
我可以从一个键值访问 NSDictionary 中的所有值吗?
在 Swift 中访问 JSON NSDictionary 对象值的简单方法?