2016-05-15 8 views
0

に組み合わせる「and」と「or」:は、私がこのような何かをしたいNSPredicates

NSPredicate(format: "name contains[cd] %@ AND (position == %@ OR position == %@), name, position1, position2) 

しかし、私はそれを試みたと私は深刻なコアデータのアプリケーションエラーを取得しておきます。私はNSCompoundPredicateを使って試しましたが、 "AND"と "OR"を組み合わせることはできません。

私はCombining 'AND' and 'OR' Condition in NSPredicateを読んでいます。質問者がサブコレクションの "OR"を必要としていて、答えに私が望ましくないサブクエリが含まれているという点が異なります。

どうすればよいですか?

+1

を得ていますか?あなたの試した名前に[cd]%@)AND(%@の位置) "、名前、[位置1、位置2])'? – Paulw11

+0

ありがとう、それは私がやっていたよりも良い方法でした! – anders32

+0

私は間違いなく、上記は機能していないと思った。従来のSwift補間を使ってforループを使ってNSPredicateに文字列を追加しようとする前に、Core Dataエラーが発生したと思われます。それから、NSCompoundPredicateを使って試してみると、それが問題だったのを忘れてしまった。 – anders32

答えて

1

コメントを投稿するには十分な評判がありません。あなたが投稿したものはうまくいくはずです。正確な問題を特定するために、より多くのコードを投稿すると役に立ちます。

では、それは私が組み合わせANDORでの作業サンプルを投稿します、あなたはあなたの問題をキャッチに役立つことを期待している:あなたはどのようなエラーを

let alice = Person(firstName: "Alice", lastName: "Smith", age: 24, position: "Up") 
let bob = Person(firstName: "Bob", lastName: "Jones", age: 27, position: "Left") 
let charlie = Person(firstName: "Charlie", lastName: "Smith", age: 33, position: "Right") 
let quentin = Person(firstName: "Quentin", lastName: "Alberts", age: 31, position: "Down") 
let people = [alice, bob, charlie, quentin] 

let predicate = NSPredicate(format: "firstName contains[cd] %@ AND (position == %@ OR position == %@)", "e", "Up", "Down") 
let filtered = (people as NSArray).filteredArrayUsingPredicate(predicate) 

print(filtered) 

// prints [Alice Smith, Quentin Alberts] 
関連する問題