2016-12-10 6 views
0

以下では、自分の実際の状況と同等であると確信しているコアデータスキーマの簡略化について説明します。コア関連するエンティティの任意の行のデータ述語

enter image description here

私は2つのエンティティFirstと多対多の関係rによってリンクされSecondを持っています。

Secondには、2つのブール属性があります。takeyou_should_not_takeとします。 take = trueSecondの関連行を終了する場合、Firstの行を選択するクエリを作成したいとします。

私はこの述語試してみました:

NSPredicate(format: "ANY (%K == YES && %K == NO)", "r.take","r.you_should_not_take") 

をしかし、Core Dataは私に次のエラーを与える:"[General] Unable to parse the format string"

たぶん私はこれを使用する必要があります:

NSPredicate(format: "((ANY %K == YES) && (ANY %K == NO))", "r.take","r.you_should_not_take") 

を私はそれはそれは行を存在するx.take == YES & &ためSecondの行xが存在する場合に限っこの最後の問い合わせがFirstの行を選択することが怖いですySecondの場合はy.you_should_not_take == NO、保証はありませんx == y

SQLクエリは非常に簡単ですが、コアデータにはあまり経験がありませんので、私はいくつかのクエリを試していますが(2番目のクエリが私の思うことを実行するかどうかテストします)その答えがSQLのように簡単であることを期待してここに尋ねました。

+0

なぜだけではなく 'NSPredicate(フォーマット: "ANY%のK == YES"、 "r.take")'? –

+0

@MartinR元のスキーマの2つの属性は無関係です。私はこの質問に対して異なる名前を選ぶことができました。 – Nisba

+0

したがって、 'take == true'と' you_should_not_take == false'の(少なくとも1つの)2番目のオブジェクトに関連するすべてのFirstオブジェクトを選択しますか?あれは正しいですか? –

答えて

1

あなたはサブクエリを使用する を持っているtake==trueyou_should_not_take==falseのために(少なくとも1つ)第二オブジェクトに関連するすべてのまずオブジェクトを選択します。 (未テスト)のようなもの:

SUBQUERY(r, $x, $x.take == YES AND $x.you_should_not_take == NO)[email protected] > 0 
+0

完璧に動作しています! – Nisba

関連する問題