2010-12-02 20 views
1

深くネストされたデータ構造とNSPredicateを使用してそのデータをフィルタリングしようとしています。ネストされた辞書/配列にNSPredicateを使用する

<!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のにロード:

は、私はこのようなplistファイルを持っています。

NSPredicateでカテゴリ 'standard'にある配列images-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を参照するのと基本的に同じため、その文字列を述語のキーパスに含めないでください。

関連する問題