0

私は Core データに不慣れで、検索に問題があります。

私のデータ構造は次のようになります:

Server   --one-to-many-->   Category   --many-to-many-->   Cube

私の考えは、サーバー オブジェクトを取得し、server.category セットを取得して、そのキューブを描画することです。

ここで、このモデルを検索する必要があります。キューブ名で検索して取得したい:

この名前 (またはその名前にこの単語が含まれる) を含むカテゴリを持つサーバー オブジェクト。

私はこのようにしようとしていました:

NSPredicate * defaultPredicate = [NSPredicate predicateWithFormat:@"ANY SELF.defaultFlag = %@ AND ANY SELF.category.cube.title = %@", [NSNumber numberWithInt:1], text];

しかし、それは私を得る

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'multiple to-many keys not allowed here'

これを正しく行う方法。

編集 :

たとえば、1 つのサーバー DemoServer に 3 つのカテゴリ (Category1、Category2、Category3) があり、これらのカテゴリにはそれぞれ 3 つのキューブ (Test、cube11、cube12)、(cube21、cube22、cube23)、(Test、Cube32、Test) があります。

そして、次を検索します:テスト(キューブタイトル)取得したい

DemoServer は 2 つのカテゴリ (Category1、Category3) を持ち、それらにはキューブ (Test)、(Test、Test) があります。

4

1 に答える 1

0

入れ子になった多対多の関係を持つ述語は少し複雑です。「明白な」述語

[NSPredicate predicateWithFormat:@"ANY category.cube.title = %@", text]

「カテゴリ」と「キューブ」の両方が対多関係の場合は機能しません。

必要なのはSUBQUERYです:

[NSPredicate predicateWithFormat:@"SUBQUERY(category, $cat, ANY $cat.cube.title = %@).@count > 0", text]

他の述語と組み合わせる:

[NSPredicate predicateWithFormat:@"defaultFlag = %@ AND SUBQUERY(category, $cat, ANY $cat.cube.title = %@).@count > 0",
        [NSNumber numberWithInt:1], text]
于 2013-10-10T12:18:13.710 に答える