在plist文件中导航多个嵌套字典

时间:2010-12-10 17:34:33

标签: iphone objective-c xcode plist

我有一个.plist文件,如下所示: alt text

并且想知道我将如何浏览多个词典,或者这是否是设置plist文件的最佳方式。

并非字典中的所有元素都具有与之相关的相同年份或大小,因此我不确定是否可以使用数组。

3 个答案:

答案 0 :(得分:2)

没有人能告诉你的“最佳方式”。这取决于你正在做什么以及你想如何使用plist。

执行所讨论的内容的标准方法是迭代for...in语句中的所有键,类似于filipe的答案。如果你知道你想要遍历的“路径”,你也可以使用NSDictionary的[dict objectForKey:key]获得更多的直接访问,而不是遍历所有内容。

这里没有魔法,只想到这种结构就像一棵无序的树。你有一个项目列表或“分支”,每个项目本身可以是另一个分支,在给定的遍历路径的末尾有一个无序树的“叶子”或值节点。

希望有所帮助。

答案 1 :(得分:1)

您可以使用keyEnumerator属性浏览字典中的所有键,或者只需使用

for (NSString *key in myDict)
{
    ...
}

答案 2 :(得分:0)

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
// get documents path
NSString *documentsPath = [paths objectAtIndex:0];
// get the path to our Data/plist file
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"DecisionName.plist"];
NSLog(@"Error in dictionary");
NSLog(@"HELLO");
NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];

NSArray *testChoice = [[NSArray alloc] initWithArray:[plistDict objectForKey:selectedDecision]];
self.choices = [testChoice objectAtIndex:0];
self.preferences = [testChoice objectAtIndex:1];

此代码将有助于从具有以下结构的plist中获取值......

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <array>
        <string>Toyota</string>
        <string>Honda</string>
    </array>
    <array>
        <string>Speed</string>
        <string>Reliability</string>
        <string>Price</string>
    </array>
</array>
</plist>