0

Core Data (To-Many) の関係を理解し​​ようとしています。次のコードには、2 つのエンティティがあります。

PeopleList <-->> トランザクションの詳細

NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *personDetails = [NSEntityDescription
                                  insertNewObjectForEntityForName:@"PeopleList"
                                  inManagedObjectContext:context];

[personDetails setValue:[person fullName] forKey:@"name"];

NSManagedObject *transactionDetails = [NSEntityDescription
                                       insertNewObjectForEntityForName:@"TransactionDetails"
                                       inManagedObjectContext:context];


[transactionDetails setValue:[NSNumber numberWithFloat:oweAmount] forKey:@"amount"];

NSError *error;
if (![context save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}

このコードは、新しいオブジェクト (行) をモデルに挿入します。私が混乱しているのは次のとおりです。2. このコードを何度も実行すると、最初のエンティティ (PeopleList) に同じオブジェクトが追加され続けます。対多関係の書き方は? 最後の数時間の読書から得られるのは、結果をフェッチし、その特定のオブジェクトを検索し、存在する場合は同じ名前の新しいオブジェクトを挿入しないことです。しかし、その場合、2 つのエンティティをどのように関連付けますか。

4

2 に答える 2

0

どちらのオブジェクトにも関係を設定していないため、そうではありません。新しく作成された TransactionDetail オブジェクトの PeopleList プロパティを設定している場所がわかりません (申し訳ありませんが、モデルで名前が付けられたプロパティをどのように取得したのかわかりません。そのため、クラス名を使用しているだけです)。したがって、transactionDetails オブジェクトを作成した後、transactionDetails.PeopleList = personDetails のような処理を行う必要があり、その時点で両方の関係が設定されます。transactionDetails.PeopleList プロパティは personDetails オブジェクトを指し、personDetails.TransactionDetails セットには transactionDetails が含まれます。

名前を設定するために使用している人物オブジェクトは何ですか?

別の注意として、この種のものすべてを NSManagedObject のサブクラスに移動することを検討することをお勧めします。エンティティごとに、独自の非常に簡単なコンストラクター/イニシャライザーなどを記述します。多くの人は決してこれを行わず、多くの CoreData ボイラー プレートでコントローラー コードを散らかしてしまいます。これは私にとって謎です。

于 2012-09-05T19:42:25.340 に答える
0

対多関係に関する限り、モデル エンティティはモデル エディターで正しく接続されていますか? エンティティのクラス ファイルを生成しましたか? 両方の質問に「はい」と答えることができる場合は、作成したのと同じように個人リスト エンティティと詳細エンティティも作成しますが、詳細を個人リストに追加する必要があります。メソッド名のクラスファイルを調べてください。

于 2012-09-05T18:39:18.483 に答える