字典中的字典(作为plist)

时间:2011-07-28 16:37:44

标签: objective-c plist nsdictionary

我有一个设置如下的plist:

enter image description here

正如您所看到的,我在字典中有一个字典:每个父节点都有子节点,这些节点本身就是一个字典,其中包含与之关联的图像和徽章。

我坚持的部分是如何将其转换为NSOutlineView的数据源..

目前我有这个:

NSString *paths = [[NSBundle mainBundle] pathForResource:@"navigationItems" ofType:@"plist"]; 
navigationItems = [[NSMutableDictionary alloc] initWithContentsOfFile:paths];

NSArray *parents = [navigationItems allKeys];

for (NSString *parent in parents) {
    SourceListItem *parentItem = [SourceListItem itemWithTitle:parent identifier:parent];

    NSArray *children = [parent allKeys];

    NSLog(@"%@", children);
}

然后我要用子进行for循环,但问题是父进程是NSString而你不能循环遍历NSString ..

那我该怎么办?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果我正确阅读您的代码,parent是包含您的plist中儿童词典的字典的键。在访问嵌入式子字典数据之前,您需要获取parentnavigationItems中引用的字典。例如:

NSString *paths = [[NSBundle mainBundle] pathForResource:@"navigationItems" ofType:@"plist"]; 
navigationItems = [[NSMutableDictionary alloc] initWithContentsOfFile:paths];

NSArray *parents = [navigationItems allKeys];

for (NSString *parent in parents) {
    SourceListItem *parentItem = [SourceListItem itemWithTitle:parent identifier:parent];

    NSDictionary *parentData = [navigationItems objectForKey:parent];
    NSArray *children = [parentData allKeys];

    NSLog(@"%@", children);
}

请记住在循环键时,以相同的方式访问每个孩子的字典数据。