Ios 访问NSC字典值

Ios 访问NSC字典值,ios,objective-c,nsdictionary,Ios,Objective C,Nsdictionary,我的字典是这样的 { 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 valueForKeyPat

我的字典是这样的

{
 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];
                    }


        }
for(int i=0;i<[responseObject count];i++){
NSDictionary*newDict=(NSDictionary*)responseObject[i];
如果([(NSString*)[newDict valueForKey:@“title”]isEqualToString:@”“]| |[newDict valueForKey:@“title”]==Nil){
NSLog(@“图像或标题文本为空”);
}
否则{
NewsFeed*newsData=[NewsFeed new];
newsData.newsource=[newDict valueForKeyPath:@“thread.site”];
newsData.newsImageLink=[newDict valueForKeyPath:@“thread.main_image”];
//这三个很好用
newsData.newsttitle=[newDict valueForKeyPath:@“title”];
newsData.newsText=[newDict valueForKeyPath:@“text]”;
newsData.newsDate=[newDict valueForKeyPath:@“已发布”];
//
NSLog(@“新闻来源:%@\n和新闻图像链接:%@\n新闻标题%@\n新闻文本:%@\n新闻日期:%@),newsData.newsSource,newsData.newsImageLink,newsData.newsTitle,newsData.newsText,newsData.newsDate);
[新闻数据添加对象:新闻数据];
}
}

试试这个现代的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"]);
编辑:操作响应后附加调试器屏幕截图:


试试这个现代的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"]);
编辑:操作响应后附加调试器屏幕截图:


看起来存储在索引下标
“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 (")
假设这确实是问题所在,您需要将字符串转换为实际的字典,您应该能够轻松地做到这一点


解决此问题后,您对
valueForKeyPath:
的使用应该是正确的,并且应该立即开始工作。

看起来存储在索引下标
“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 (")
假设这确实是问题所在,您需要将字符串转换为实际的字典,您应该能够轻松地做到这一点


解决此问题后,您对
valueForKeyPath:
的使用应该正确,并且应该立即开始工作。

请说明您尝试了哪些代码,以及它有何缺陷。我已添加了代码,响应以数组的形式出现。请说明您尝试了哪些代码,我已经添加了代码,响应以数组的形式出现。在调试po newDict[@“thread”]时,如果我这样做,它会列出所有键及其值,但当我这样做po myDict[@“thread”[@“main_image”]时,它会给出以下错误:警告:无法获取cmd指针(替换为NULL):在此帧执行中未找到名为“_cmd”的变量,原因:试图取消引用无效的ObjC对象或向其发送无法识别的选择器。进程已返回到表达式求值之前的状态。这对我来说非常有用。查看我的调试器附带的屏幕截图。我使用的是Xcode 7。正如Thuggish在上面指出的,看起来你的字典没有使用真正的字典,这就是为什么你不能看到它工作的原因。如果你试用我的示例词典,它应该会有用。所以这里的关键是检查传入的数据并将其更正为正确的字典。是的,这就是问题所在..感谢帮助人员..:)在调试po newDict[@“thread”]时,如果我这样做,它会列出所有键及其值,但当我这样做po myDict[@“thread”[@“main_image”]时,它会给出以下错误:警告:无法获取cmd指针(代以NULL):在此帧中未找到名为“_cmd”的变量,执行被中断,原因:试图取消引用无效的ObjC对象或向其发送无法识别的选择器。进程已返回到表达式求值前的状态。这对我来说非常有用。请参阅我的调试器附带的屏幕截图。我正在使用Xcode 7。作为Thuggish p如上所述,您似乎没有使用真正的字典,这就是为什么您无法看到它工作的原因。如果您尝试使用我的示例字典,它应该会工作。因此,这里的关键是检查传入的数据并将其更正到正确的字典。是的,这就是问题所在。。感谢帮助人员:)刚刚检查出来…确实是问题所在,建议链接的解决方案正是我想要的…非常感谢各位…刚刚检查出来…确实是问题所在,建议链接的解决方案正是我想要的..非常感谢各位。。