1

次の内容の 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 には任意の数のサブレベルが存在する可能性があります。ただし、このキーは常に最後のサブ レベルになります。

4

1 に答える 1

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;
}
于 2013-03-19T07:45:02.110 に答える