2010-12-02 5 views
1

J'essaie d'utiliser une structure de données profondément imbriquée et NSPredicate pour filtrer ces données.en utilisant NSPredicate sur un dictionnaire/tableau imbriqué

Je dispose d'un fichier plist comme ceci:

<!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> 

qui je charge dans un NSDictionary via dictionWithContentsOfFile. Je veux ensuite obtenir les éléments du tableau images-ipad qui sont dans la catégorie 'standard' via NSPredicate. Je pense que c'est possible, mais je n'ai pas réussi à l'accomplir, et les documents ne semblent pas couvrir les structures de données imbriquées.

Alors, je l'ai essayé ceci:

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

mais il ne retourne pas d'éléments qui me amène à Stackoverflow. Merci d'avance.

Répondre

4

Puisque vous filtrez le résultat de [dict objectForKey:@"images-ipad"], vous ne devez pas inclure cette chaîne dans le chemin clé du prédicat, car cela équivaut essentiellement à rechercher images-ipad.images-ipad.categories, qui n'existe pas.

Questions connexes