我有一个简单的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:
( ( 汉堡包, 过去 ) ( 可乐, 精灵 ))
我不知道问题出在哪里。为什么我无法获取NSDictionary
到NSArray
的所有值。
如果我使用代码:
NSArray *allMenu = [[myDictionary allValues] objectAtIndex:0];
将向我展示食物价值。如果我将objectAtIndex更改为1将显示饮料值。
答案 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"];