0

ユーザー、アドレスの 2 つのエンティティがあります。各ユーザーが複数の「アドレス」を持つことができる関係を設定しました。コアデータがどのように機能するかはわかりませんが、私の理解では、insertEntityForName を呼び出すたびに、オブジェクトが作成および保存されます。(テーブルの行も)

質問: 次のコードはコア データに重複したアドレスを格納していませんか?

  1. ユーザーエンティティに挿入すると、アドレスも挿入されます
  2. アドレスエンティティの挿入を呼び出すと、別のアドレスが作成されます。

私が正しく、これが実際にデータベースに重複を作成する場合、それを防ぐ方法は何ですか?

User *user = [NSEntityDescription insertEntityForName:@"User" 
                      inManagedObjectContext:self.managedObjectContext];
user.firstName = @"first name";
user.lastName = @"last name";

Address *address = [NSEntityDescription insertEntityForName:@"Address" 
                      inManagedObjectContext:self.managedObjectContext];
address.street = @"street";
user.address = address;
4

2 に答える 2

3

いいえ、重複するアドレスは作成されません。最初の挿入では、を作成するだけで、を作成しUserませんAddress。ユーザーのアドレスはnilになります。

本当にAddressユーザーの関係を1対多にした場合user.address、そのように割り当てることはできません。それはを期待しているので、警告を出す必要がありNSSet*ます。また、私はそれを呼び出すことをお勧めしaddressesます。できるよ:

user.address = [NSSet setWithObject:address];

また

[user addAddressObject:address];
于 2010-10-16T22:51:02.993 に答える
0

CoreDataはデータベースに限定されず、メモリ内またはXMLを使用して機能する場合もあります。sqliteストアを使用しているときにどのように動作するかを次に示します。

Core Dataは、1つの行をユーザーテーブルに挿入し、もう1つをアドレステーブルに挿入します。アドレスにユーザーを1人しか含めることができない場合は、(データベースのセットアップ時に)ユーザーエントリのIDを含む列をアドレステーブルに追加します。これが2つのリンク方法です。また、リンクをどのように作成するかは重要ではありません。user.address= XY; またはXY.user=user;

ただし、user.address = XYは、ユーザーが1つのアドレスしか持てない場合にのみ機能します。

于 2010-10-16T22:53:22.617 に答える