2013-03-19 159 views
1

我有以下内容的plist文件:一个NSDictionary中的内容复制到另一个NSDictionary的

<plist> 
<dict> 
    <key>Rows</key> 
    <array> 
     <dict> 
      <key>Asia</key> 
      <string>India</string> 
      <array> 
       <dict> 
         <key>Description</key> 
         <string>Country</string> 
       </dict> 
      </array> 
     </dict> 
     <dict> 
      <key>Europe</key> 
      <string>Germany</string> 
      <array> 
       <dict> 
         <key>Germany</key> 
         <string>Berlin</string> 
         <array> 
          <dict> 
           <key>Description</key> 
           <string>State</string> 
          </dict> 
         </array> 
       </dict> 
      </array> 
     </dict> 
    </array> 

我存储在NSDictionary中这些内容。从这里有什么办法可以让我只能得到那些关键是“描述”的对象。我找不到任何解决方案,因为“描述”键没有固定位置,这意味着plist中可以有任何数量的子级别。但是这个关键将永远是最后一个子层次。

+0

plist在xcode中打开的截图。 – Guru 2013-03-19 07:42:39

回答

1

你需要通过字典递归,并获得每个具有描述键的列表。类似这样的东西(未测试):

NSDictionary *rootLevel = //dictionary from plist 
NSArray *dictionariesWithKey = [self dictionariesWithDescriptionKeyFromDictionary:rootLevel]; 


- (NSArray *)dictionariesWithDescriptionKeyFromDictionary:(NSDictionary *)dict 
{ 
    NSMutableArray *dictionaries = [NSMutableArray array]; 
    [dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id val, BOOL *stop) { 

     if ([key isEqualToString:@"description"]) 
      [dictionaries addObject:dict]; 
     else if ([val isKindOfClass:[NSDictionary class]]) 
      [dictionaries addObjectsFromArray:[self dictionariesWithDescriptionKeyFromDictionary:val]]; 
    }]; 
    return dictionaries; 
} 
相关问题