2016-03-24 12 views
1

INを使用してフィルタリングする必要があります。ここに私のコードは次のとおりです。Swiftに含めるNSPredicateをフィルタリングする方法は?

let choices = "1,2,3,4" 

次にアプリをクラッシュされ、このようにそれを使用します。

NSPredicate(format: "id in %@", @choices) 

私も試してみた:

NSPredicate(format: "id in [1,2,3,4]") 

しかし、このエラーが表示されます。

'Unable to parse the format string "id in [1,2,3,4]"' 
+3

' "1,2,3,4"'本当に? '@ choices'?本当に?本当に?? – matt

+0

本当にカンマで区切られた文字列としてリストを格納する必要がある場合、これは役立ちます:[IDの文字列からフォームNSPredicate](http://stackoverflow.com/questions/14932595/form-nspredicate-from-string-その-idsを含む)。 –

答えて

2

let choices = "1,2,3,4" - これはstrです

NSPredicate(format: "id in %@", @choices)choices

結果と@choicesを置き換える - - 比較したいプロパティがあるlet choices = [1,2,3,4]

id場合INGは、配列でなければなりませんNSPredicate(format: "id in %@", choices)

あなたがオブジェクト自体を比較したい場合は NSPredicate(format: "self in %@", @choices)@choiceschoicesと置き換え、idself

結果 - NSPredicate(format: "self in %@", choices) 与えられた述語に対して比較/評価されるオブジェクトは、selfです(指し示す)。

+0

これはCoreDataで使用されています。 idはこのエンティティの属性です。 – 4thSpace

+0

上記はおそらく機能しますが、配列である必要はありません。これはうまくいきます:NSPredicate(形式: "id in {\(choices)}")。 – 4thSpace

+0

@ 4thSpace最初のかっこの前に\を付けてエスケープし、それを変数として認識させる必要があります。 'NSPredicate(形式:" id {\(choices)} ")' – ColGraff

1

は、中かっこで囲む必要があります{}。その後、それは動作します。

NSPredicate(format: "id in {\(choices)}") 

結果の文字列は次のようになります。

id in {1,2,3,4} 
+0

'choices'に特殊文字(引用符のように)、クラッシュします。書式文字列の文字列補間は悪い考えです。 –

+0

他のフォーマットが表示される危険性がないように制御されています。 – 4thSpace

関連する問題