【问题标题】:Copy contents of one NSDictionary into another NSDictionary将一个 NSDictionary 的内容复制到另一个 NSDictionary
【发布时间】:2013-03-19 07:12:24
【问题描述】:

我有一个包含以下内容的 plist 文件:

<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 中。从这里有什么方法可以让我只获得关键是 "description" 的那些对象。我找不到任何解决方案,因为键“描述”没有固定位置,这意味着 plist 中可以有任意数量的子级别。但是这个键将永远是最后一个子级别。

【问题讨论】:

  • 张贴在 xcode 中打开的 plist 截图。

标签: iphone objective-c nsdictionary


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多