从NSMutableDictionary获取所有值

时间:2016-01-14 04:11:17

标签: ios objective-c

我有一个简单的UITableView,当用户添加新行时,这些行会添加到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:

  

(           (           汉堡包,           过去       )           (           可乐,           精灵       ))

我不知道问题出在哪里。为什么我无法获取NSDictionaryNSArray的所有值。

如果我使用代码:

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

将向我展示食物价值。如果我将objectAtIndex更改为1将显示饮料值。

3 个答案:

答案 0 :(得分:4)

我不完全确定你在问什么,如果你想在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);
    }
}

答案 1 :(得分: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];
        }

答案 2 :(得分: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"];