2015-10-02 3 views
1

Мой Nsdictionary выглядит так.Доступ к значениям NSDictionary Objective C

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

Я пытаюсь получить доступ к нему, как это, но это я могу получить все другие ценности, которые находятся за пределами резьбы, но не могу вложенные значения в thread.Any помощи ценится.

EDIT

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


     } 
+0

Пожалуйста, покажите, какой код вы пробовали, и как он был недостаточным. –

+0

Я добавил код, и ответ приходит в виде массива. – soldiershin

ответ

4

Похоже, что объект, хранящийся в индексированном индексе "thread", равен , а не a 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: должно быть правильным и должно немедленно начать работать.

+1

Просто проверил это ... В самом деле, это была проблема, и предлагаемое решение ссылки было именно тем, чего я хотел ... Спасибо большому человеку .. – soldiershin

1

Попробуйте этот современный код 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"]); 

EDIT: После ответа OP прикрепляя скриншоте отладчика:

enter image description here

+0

В debugginng po newDict [@ "thread"], если я это сделаю, он перечисляет все ключи и его значения, но когда я делаю это po myDict [ @ "thread"] [@ "main_image"] он дает эту ошибку: предупреждение: не удалось получить указатель cmd (подставляя NULL): в этом фрейме нет переменной с именем «_cmd» Выполнение было прервано, причина: попытка разыменования недопустимый объект ObjC или отправить ему непризнанный селектор. Процесс был возвращен государству до оценки выражения. – soldiershin

+0

Это работает как прелесть для меня. См. Прикрепленный снимок экрана от моего отладчика. Я использую Xcode 7. – Abhinav

+2

Как указано в Thuggish выше, похоже, что вы не используете настоящий словарь, и именно поэтому вы не можете его увидеть. Если вы попробуете мой образец словаря, он должен работать. Таким образом, здесь вы можете проверить свои входящие данные и исправить их по правильному словарю. – Abhinav

Смежные вопросы