2013-04-16 2 views
-1

Im работая с фликром и в образце выборку я получаю это:Как получить все значения из NSDictionaries внутри NSDictionary?

{ 
    "api_key" =  { 
     "_content" = 3c6eeeae4711a5f478d3da796750e06b; 
    }; 
    format =  { 
     "_content" = json; 
    }; 
    method =  { 
     "_content" = "flickr.test.echo"; 
    }; 
    nojsoncallback =  { 
     "_content" = 1; 
    }; 
    stat = ok; 
} 

Это словарь с 5 записями (api_key, форматом, метод, nojsoncallback & стата). Первые 4 - сами словари.

Во-первых, в моем оригинальном словаре есть 5-й элемент, который не является словарем, это просто последняя запись в оригинальном словаре (один stat = ok). Кроме того, я хочу, чтобы ключ _content в каждом подзаголенке отображался в моих отдельных ячейках, но я не хочу жестко кодировать любые значения. Do I HAVE для настройки массива?

+1

Что вы пробовали? Это абсолютно простое использование NSDictionary. Вы знаете структуру, и вы знаете все ключи. – matt

+0

На ум приходит петля. (Может быть, вам, правда, придется посмотреть документацию NSDictionary.) –

+0

Да, но я хочу написать цикл, который получает каждый объектForKey без знания имен ключей. – marciokoko

ответ

2

Попробуйте

for (NSString *key in dictionary){ 
    id object = dictionary[key]; 
    if ([object isKindOfClass:[NSDictionary class]]) { 
    //Now you can work on the dictionary object 
    } 
} 
+0

Хорошо, я попробовал свое предложение так:' for (NSString * key in flickrDictionary) { id object = flickrDictionary [key]; if ([объект isKindOfClass: [NSDictionary class]]) { cell.textLabel.text = [значение объектаForKey: @ "_ content"]; } } 'Так что я говорю, если объект для первого ключа (api_key) - это словарь, который он есть, получает свой _content ключ и помещает его в ячейку. Но я получаю api_key во всех 5 ячейках :(Id должен каким-то образом использовать индексный путь, правильно? Я хочу, чтобы ключ _content в каждом подзагороде отображался в моих отдельных ячейках, но я не хочу жестко кодировать любые значения. – marciokoko

4

NSDictionary имеет отличный метод, называемый valueForKeyPath. Это ваш спаситель здесь.

[dict valueForKeyPath:@"api_key._content"] 
[dict valueForKeyPath:@"format._content"] 
[dict valueForKeyPath:@"method._content"] 
[dict valueForKeyPath:@"nojsoncallback._content"] 

Что она делает это пройти ключевой путь и получать значения content в каждой подструктуры JSON. В противном случае вам пришлось бы написать for-loop и пропустить его. Аккуратно?

+0

Спасибо, это очень удобно! :) Однако мне нужно получить каждое значение отдельно и поместить его в другую ячейку. Так что в принципе мне нужно было бы создать переключатель здесь, чтобы вставить правильное значение в правую ячейку, правильно? – marciokoko

+0

да, если вы хотите поместить каждое значение в другую ячейку, вам, возможно, придется помещать 'if-else' в' индексный путь' 'UITableViewCell'. Вышеупомянутый анализ JSON должен выполняться в петле верхнего уровня. –

+0

Ive получил это до сих пор ... 'for (NSString * key in flickrDictionary) { NSLog (@" ключ% @ ", flickrDictionary [ключ]); id object = flickrDictionary [key]; // это будет apikey, format, method и т. д. if ([object isKindOfClass: [NSDictionary class]]) {// первые 4 являются массивами-crsh-dicts NSLog (значение @ "valueForKey is% @", [object valueForKey: @ "_ content"]); cell.textLabel.text = [объект valueForKey: @ "_ content"]; } else { cell.textLabel.text = flickrDictionary [key]; } } 'Я думаю, я просто положил его в массив – marciokoko

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