2016-05-31 12 views
1

私はという名前のメイン配列を持っています。元の配列はで、複数のオブジェクトがあります。ここにオブジェクトの例があります。 Example.jsonNSPredicate ANYとINを使用してNSDictionary(オブジェクトのネストされたレベル)でNSArrayをフィルタリングしますか?

私は私のフィルタデータと一致しているamenity_id originalListArray、からのオブジェクトの数を見つけたいです。 これを実行して、1つの述語を作成します。ANY自己 NSArrayをNSArrayで使用し、そのDictionaryオブジェクトにNSArrayデータがある可能性があります。

これは正常に動作しています。

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id =='1')"]; 

これは動作しません。

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id in ('1','2','3')"]; 

ため、単一値を簡単にフィルタすることができますがoparation、IN usignそのクラッシュやエラーは、このようなものです。

によりキャッチされない例外 'NSInvalidArgumentException'、理由にアプリを終了: ' "(1 ' '2'、 '3')

書式文字列内の任意のamenities.amenity_id"' を解析できません'

ありがとうございました。もしこれで助けてくれれば助かります。

+2

'[NSPredicate predicateWithFormat:

あなたはまだそれが手動で "文字列形式" を変更したいと思う場合は、@ "ANY amenities.amenity_id、IN%@"、@ [ "1" @、@ "2"、@ "3"]] '? – Larme

+1

@Larmeはい、それは働いています。まず、あなたの素早い応答に感謝しますが、私はなぜ配列として渡らなければならないのか分かりませんでした。 INクエリでは、一般的にコンマで区切られた値を文字列として渡します。 –

+0

作業用の述語をログに記録すると、それは実際には "@"すべての便宜を示します。amenity_id IN {'1'、 '2'、 '3'} "'(カッコの代わりにブレスレットを使用します)。そうでない場合は、プレースホルダ(%@)で渡すと、必要に応じてより簡単に変更できます。 – Larme

答えて

2

配列をパラメータとして%@プレースホルダに渡す方が良いと思います。

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN %@", @[@"1",@"2",@"3"]] 

こうして、手動でアレイを作成することができます。変更する必要がある場合は、その方が簡単です。

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN {'1', '2', '3'}"] 
関連する問題