0

親オブジェクトは、子であるため、自己に対して対多の関係にあります。

コア データ モデル

オブジェクトのすべての子を取得すると、リクエストは逆の関係を介して親オブジェクトも返します。

結果に子オブジェクトのみが含まれるように、フェッチ要求内で逆の関係を除外する方法はありますか?

これまでの私の解決策は、フィルター処理された子の配列を返す Object のカスタム NSManagedObject クラス内にメソッドを実装することでした。

-(NSArray *)getChildrenOfObjectWithoutParent:(int)parentId
{
    NSArray *results = [[self.children allObjects] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(objId != %d)", parentId]];
    return results;
}
4

1 に答える 1

2

よりクリーンなソリューションは、2 つの関係を持つことです。

  • childrenオブジェクトからそれ自体への対多関係として、
  • parentオブジェクトからそれ自体への対一関係として

これらを相互に逆の関係として定義します。

次にself.children、問題やトリックなしで、正確に子オブジェクトを提供します。

ここに画像の説明を入力

(あなたの説明から、オブジェクトは親を1つしか持てないと思います。オブジェクトに複数の親がある場合は、対多関係parentとしても定義します。)

このセットアップのもう 1 つの利点は、リレーションシップに対してさまざまなコア データの「削除ルール」を定義できることです。

便利な例の 1 つを次に示します。

  • childrenリレーションシップのルール「カスケード」を削除し、
  • 関係のルール「無効化」を削除しparentます。

その結果、1 つのオブジェクトが削除されると、そのすべての子オブジェクトも自動的に削除され、そのオブジェクトは親オブジェクトの子から削除されます。

于 2012-12-11T18:58:49.237 に答える