0

私はコアデータを初めて使用します。誰かがフィードバックを提供したり、特定の要件を教えてくれたりするとうれしいです。

Entity A
{
property 1;
property 2;
property 3;
}
Entity B
{
property 1;
property 2;
property 3;

}
Entity C
{
EntityB ObjB; // pointing to Entity B
EntityA ObjA; // pointing to Entity A
property 1;
property 2;
property 3;
}
Entity D
{
EntityB ObjB; // pointing to Entity B
EntityA ObjA; // pointing to Entity A
property x;
property y;
property z;

}

新しく挿入されたオブジェクトは、さらにいくつかのプロパティとともにエンティティ C、エンティティ D に格納する必要があります。

メインコンテキストへの挿入を分離するために、以下のアプローチが使用されます

 NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityB" inManagedObjectContext:self.managedObjectContext];
    objB = [[EntityB alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];

objB と objA を EntityC に格納しているため、以下の EntityD メソッドが使用されます。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityC" inManagedObjectContext:self.managedObjectContext];
        objC = [[EntityC alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
objC.objB = objC;

NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityD" inManagedObjectContext:self.managedObjectContext];
        objD = [[EntityD alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
objD.objB = objB;

最後に、すべてのオブジェクトをメイン コンテキストに保存します。

  [self.managedObjectContext insertObject:objB];
  [self.managedObjectContext insertObject:objC];
  [self.managedObjectContext insertObject:objD];
  [self.managedObjectContext save:&error];

私はコアデータの経験があまりないので、情報を保存する方法が良いか、言及されたシナリオでデータを保存する別の方法があるかを知りたいです。

貴重な時間をありがとう。

4

1 に答える 1

0

これ:

objC.objB = objC;

意味がありません。おそらくタイプミスであり、あなたが意図したものです

objC.objB = objB;

これ:

objD.objB = objB;

objDは正しく、との間の関係を確立しobjBます。

これらの呼び出し:

[self.managedObjectContext insertObject:objB];
[self.managedObjectContext insertObject:objC];
[self.managedObjectContext insertObject:objD];

initWithEntity:insertIntoManagedObjectContext:オブジェクトはすでにコンテキストに挿入されているため、必要ありません。

EntityAEntityBからEntityCEntityD への逆の関係も定義する必要があることに注意してください。すでにそれを行っているかどうかは、あなたの質問からわかりません。

于 2013-07-13T12:28:19.473 に答える