2016-01-14 282 views
0

我有一個簡單的UITableView,當用戶添加新行時,這些將被添加到NSMutableDictionary。我可以檢索特定鍵的值。從NSMutableDictionary獲取所有值

NSArray *myArr = [myDictionary valueForKey:@"Food"]; 

這將顯示我要重點食品的所有值,這是我的NSLog的例子:

( 漢堡, 麪食)

如果我增加更多的對象myDictionary,但用於不同的密鑰,例如:

NSArray *drinks = [NSArray arrayWithObjects:@"cola",@"sprite",nil]; 
[myDictionary setObject:drinks forKey:@"Drink"]; 
NSArray *allMenu = [myDictionary allValues]; 

它顯示我以下的NSLog:我不能使用下面的代碼檢索所有值

( ( 漢堡, 過去 ), ( 可樂, sprite ))

我沒有知道問題在哪裏。爲什麼我無法獲得從NSDictionaryNSArray的所有值。

如果我使用的代碼:

NSArray *allMenu = [[myDictionary allValues] objectAtIndex:0]; 

會告訴我的食品價值。如果我將objectAtIndex更改爲1,將顯示Drink值。

+1

你想要什麼結果? – anhtu

+0

不清楚的問題。你正在把所有的值都放到'allMenu'中。 –

+0

爲什麼使用allValues,只能使用objectATIndex –

回答

0

你可以通過使用鍵值編碼(KVC)將展平爲返回的二維數組。我在another answer找到了這個,見the docs。在你的情況下,它看起來如下:

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary]; 
NSArray *food = [NSArray arrayWithObjects:@"burger",@"pasta",nil]; 
[myDictionary setObject:food forKey:@"Food"]; 
NSArray *drinks = [NSArray arrayWithObjects:@"cola",@"sprite",nil]; 
[myDictionary setObject:drinks forKey:@"Drink"]; 

NSArray *allMenue = [[myDictionary allValues] valueForKeyPath:@"@unionOfArrays.self"]; 
+0

非常感謝。這個「unionOfArrays.self」做了詭計。 – Joe

3

我不完全知道你在問什麼,如果你想一個NSDictionary內打印所有值做到以下幾點:

//Gets an array of all keys within the dictionary 
NSArray dictionaryKeys = [myDictionary allKeys]; 
for (NSString *key in dictionaryKeys) 
{ 
    //Prints this key 
    NSLog(@"Key = %@", key); 
    //Loops through the values for the aforementioned key 
    for (NSString *value in [myDictionary valueForKey:key]) 
    { 
     //Prints individual values out of the NSArray for the key 
     NSLog(@"Value = %@", value); 
    } 
} 
0

嘗試這種解決方案:

- (NSDictionary *) indexKeyedDictionaryFromArray:(NSArray *)array 
     { 
      id objectInstance; 
      NSUInteger indexKey = 0U; 
      for (objectInstance in myArr) 
      [mutableDictionary setObject:objectInstance forKey:[NSNumber numberWithUnsignedInt:indexKey++]]; 

      return (NSDictionary *)[myDictionary autorelease]; 
     }