2014-05-14 26 views
0

我有一个NSMutableDictionary有如下的结构:NSMutableDictionary keyEnumerator或NSArray?

Main Dictionary > Unknown Dictionary > Dictionaries 1,2,4,5,6...

我的问题是什么是检索未知词典按键,并将其设置为可变的最佳方式?这是我已经试过:

NSEnumerator *enumerator = [myMutableDict keyEnumerator]; 
id aKey = nil; 
while ((aKey = [enumerator nextObject]) != nil) { 
    id value = [myMutableDict objectForKey:aKey]; // changed to `aKey` 
    NSLog(@"%@: %@", aKey, value);    // tip via rmaddy 
} 

什么进入objectForKey:如果你不知道在关键的对象的名称?

另一个想法是填充NSArray,然后以某种方式拉出每个键。

for (NSString *object in myMutableDict) 
     myArray = [myArray arrayByAddingObject:MainDict]; 
} 

如果任何人都可以提出一个更好的方式来获得一个NSMutableDictionary我感兴趣的学习对象(未知)。

+0

您的for循环正常工作,可让您遍历'myMutableDict'中的所有键。你在问什么问题? – mah

+0

@mah,只是想知道最好和最有效的方法。另外我不确定keyEnumerator是如何工作的。我在我感到困惑的代码中发表评论。 – ctfd

+0

'whileFor'循环内'objectForKey:'的调用应该是'[myMuyableDict objectForKey:aKey]'。 – rmaddy

回答

1

您可以枚举字典是这样的:

NSDictionary * someDictionary = ... however you set your dictionary; 
[someDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    NSLog(@"Key: %@", key); 
    NSLog(@"Object: %@", obj); 


}]; 

,并设置:

*stop = YES; 

当你找到你要找的对象。

+0

块是否比旧式语法更高效,并且在使用块(ARC特定等)时是否存在任何警告?谢谢! – ctfd

+0

我不知道他们是否更有效率。注意事项 - 您可能需要更清楚自己如何分配内容。这主要与后台线程相关,或者当视图控制器在被所述视图控制器保留的块中被引用时。使用这样的块确实不应该导致任何问题。如果你想使用局部变量,你将不得不放置一个'__block'说明符。在个人笔记中,我绝对喜欢块。它们非常有用! – Logan

+0

我个人更喜欢这个解决方案,因为它直接获得了我所有的对象和按键,所以它为我节省了一两步。 – Logan

0

我不完全确定我是否正确理解你的问题。我假设你有一个“主”字典,其中只有一个(未知)键映射到你想要检索的另一个字典。这将是一个简洁明了的方式来做到这一点:

NSDictionary *unknownDictionary = mainDictionary[mainDictionary.allKeys.firstObject]; 

(是的,有些人会不喜欢这里的点语法,但我觉得它更容易在这种情况下阅读您可能还需要添加。一些错误检查,对于mainDictionary为空的情况等)

+0

谢谢你的例子。你是对的 - 我只是想找到从我的字典中获得未知值的最佳方式。由于未知的选择器,我将'lastPathComponent'的值与'lastPath'的值进行比较时遇到了一些问题。我希望通过事先了解钥匙,我可以避免这些问题。 – ctfd

相关问题