использование NSPredicate для вложенного словаря / массива - PullRequest
1 голос
/ 03 декабря 2010

Я пытаюсь использовать глубоко вложенную структуру данных и NSPredicate для фильтрации этих данных.

У меня есть файл plist, подобный этому:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>images-ipad</key>
        <array>
                <dict>
                        <key>categories</key>
                        <array>
                                <string>standard</string>
                        </array>
                        <key>name</key>
                        <string>Default</string>
                        <key>plist</key>
                        <string>cardSheet.plist</string>
                        <key>png</key>
                        <string>cardSheet.png</string>
                </dict>
                <dict>
                        <key>categories</key>
                        <array>
                                <string>standard</string>
                        </array>
                        <key>name</key>
                        <string>Optional</string>
                        <key>plist</key>
                        <string>cardSheet.plist</string>
                        <key>png</key>
                        <string>cardSheet.png</string>
                </dict>
                <dict>
                        <key>categories</key>
                        <array>
                                <string>christmas</string>
                                <string>holiday</string>
                                <string>standard</string>
                        </array>
                        <key>name</key>
                        <string>christmas</string>
                        <key>plist</key>
                        <string>cardSheet.plist</string>
                        <key>png</key>
                        <string>cardSheet.png</string>
                </dict>
        </array>
</dict>
</plist>

, который я загружаю в NSDictionary через dictionWithContentsOfFile.

Затем я хочу получить элементы массива images-Ipad, которые находятся в категории «стандарт» через NSPredicate.Я думаю, что это возможно, но я не смог этого сделать, и документы, похоже, не охватывают вложенные структуры данных.

Итак, я попробовал это:

NSPredicate *getcat = [NSPredicate predicateWithFormat:@"ANY images-ipad.categories == 'holiday'"];
NSArray *res = [[dict objectForKey:@"images-ipad"] filteredArrayUsingPredicate:getcat];

но он не возвращает никаких элементов, что приводит меня к stackoverflow.Заранее спасибо.

1 Ответ

4 голосов
/ 03 декабря 2010

Поскольку вы фильтруете результат [dict objectForKey:@"images-ipad"], вы не должны включать эту строку в ключевой путь предиката, поскольку в основном это эквивалентно поиску images-ipad.images-ipad.categories, которого не существует.

...