2010-12-02 73 views
1

我試圖使用深度嵌套的數據結構和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獲取類別爲「標準」的數組圖像-ipad元素。我認爲這是可能的,但是我一直無法實現它,而且這些文檔似乎沒有涵蓋嵌套的數據結構。

所以,我已經試過這樣:

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

,但它不返回任何元素,這是我帶來的StackOverflow。提前致謝。

回答

4

由於您正在過濾[dict objectForKey:@"images-ipad"]的結果,因此您不應將該字符串包含在謂詞的鍵路徑中,因爲它基本上等同於查找不存在的images-ipad.images-ipad.categories