iPhone - основной вопрос данных? - PullRequest
0 голосов
/ 17 октября 2010

У меня есть 2 объекта: Пользователь, Адрес.Я установил отношения, которые каждый пользователь может иметь много «адрес».Я не уверен, как работают основные данные, но, насколько я понимаю, каждый раз, когда я вызываю insertEntityForName, он создает и сохраняет объект.(также строка в таблице)

Итак, вопрос: не хранит ли следующий код дублирующий адрес в основных данных?

  1. Когда я вставляю для объекта пользователя, он также вставляетaddress
  2. Когда я вызываю insert для объекта address, он создает другой адрес.

Если я прав, и это на самом деле создает дубликат в базе данных, как это предотвратить?

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;

Ответы [ 2 ]

3 голосов
/ 17 октября 2010

Нет, это не создаст дублирующийся адрес.При первой вставке создается только User, а не Address.Адрес пользователя будет ноль.

Если вы действительно установили отношение Address пользователя один-ко-многим, вы не можете назначить user.address таким образом, он должен выдать предупреждение, так как этоожидая NSSet*.Также я бы рекомендовал назвать это addresses.Вы можете сделать:

user.address = [NSSet setWithObject:address];

или

[user addAddressObject:address];
0 голосов
/ 17 октября 2010

CoreData не ограничивается базами данных, он также может работать в памяти или с использованием XML.Вот как это происходит, когда вы используете хранилище sqlite.

Базовые данные вставляют одну строку в пользовательскую таблицу, а другую - в таблицу адресов.Если адрес может иметь только одного пользователя, то он добавит столбец (при настройке базы данных) в таблицу адресов, который будет содержать идентификатор записи пользователя.Вот как эти два связаны.Также не имеет значения, как вы создаете ссылку, либо user.address = XY;или XY.user = пользователь;

Однако user.address = XY работает, только если у пользователей может быть только один адрес.

...