2013-03-19 162 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; 
} 
相關問題