2013-04-16 77 views
-1

林與Flickr和樣品中的工作取我得到這樣的:如何從NSDictionary內的NSDictionary中獲取所有值?

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

這與5個條目(API_KEY,格式,方法,nojsoncallback & STAT)的字典。前4個詞條本身就是詞典。

首先,我的原始字典中有第5個元素,它不是字典,它只是原始字典中的最後一個條目(一個stat = ok)。此外,我希望每個子條目中的_content鍵出現在我的單個單元格中,但我不想硬編碼任何值。我有有沒有建立一個數組?

+1

你嘗試過什麼?這是NSDictionary的一個非常直接的用法。你知道結構,你知道所有的鑰匙。 – matt

+0

想到一個循環。 (也許,你實際上必須看看NSDictionary文檔。) –

+0

是的,但我想寫一個循環來獲取每個objectForKey而不知道鍵名稱。 – 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([object isKindOfClass:[NSDictionary class]]){cell_textLabel.text = [object valueForKey:@「_ content」]; '因此,我說,如果第一個鍵(api_key)的對象是一個字典,就是它的_content鍵並將其放入單元格中。但我得到的所有5個單元格中的api_key :(Id必須以某種方式使用indexpath,對嗎?我希望每個子條目中的_content鍵出現在我的單個單元格中,但我不想硬編碼任何值。 – marciokoko

4

NSDictionary有一個漂亮的小方法,稱爲valueForKeyPath。這就是你的救世主。

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

它能做什麼是穿越的關鍵路徑,並在每個JSON子取的content值。否則,你將不得不寫一個for-loop並通過它循環。整潔吧?

+0

謝謝,這很方便! :)但是,我需要分別獲取每個值並將其放入不同的單元格中。所以基本上我必須在這裏創建一個開關,在正確的單元格中輸入正確的值,對嗎? – marciokoko

+0

是的,如果你想把每個值放在不同的單元格中,你可能必須在'UITableViewCell'的'index path'上放一個'if-else'。上面提到的JSON解析需要在頂級循環中完成。 –

+0

我到目前爲止...'for(NSString * key in flickrDictionary){ NSLog(@「the key is%@」,flickrDictionary [key]); id object = flickrDictionary [key];如果([object isKindOfClass:[NSDictionary class]]){//第一個4是數組-crsh-dicts NSLog(@「object valueForKey is%@」,//這個將會是apikey,格式, [object valueForKey:@「_ content」]); cell.textLabel.text = [object valueForKey:@「_ content」]; } else { cell.textLabel.text = flickrDictionary [key]; } }'我猜不好把它放到一個數組中 – marciokoko