在嵌套字典/数组上使用NSPredicate

时间:2010-12-02 21:21:30

标签: objective-c nspredicate

我正在尝试使用深度嵌套的数据结构和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>

我通过dictionWithContentsOfFile加载到NSDictionary中。

然后我希望通过NSPredicate获取“标准”类别中的数组images-ipad的元素。我认为这是可能的,但我无法完成它,而且文档似乎没有涵盖嵌套数据结构。

所以,我试过这个:

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

但它不返回任何元素,这使我进入stackoverflow。提前谢谢。

1 个答案:

答案 0 :(得分:4)

由于您要过滤[dict objectForKey:@"images-ipad"]的结果,所以不应该在谓词的关键路径中包含该字符串,因为它基本上等同于查找不存在的images-ipad.images-ipad.categories