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。用户的地址将为零。

如果您确实确实使AddressUser 的关系成为一对多,则不能这样分配user.address,它应该发出警告,因为它期望NSSet*. 我也建议调用它addresses。你可以做:

user.address = [NSSet setWithObject:address];

或者

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

CoreData 不限于数据库,它也可以在内存中工作或使用 XML。以下是使用 sqlite 商店时发生的事情。

核心数据在用户表中插入一行,在地址表中插入一行。如果一个地址只能有一个用户,那么它将在地址表中添加一列(在设置数据库时),该列将包含用户条目的 id。这就是两者的联系方式。您如何创建链接也无关紧要 user.address = XY; 或 XY.user = 用户;

但是 user.address = XY 仅在用户只能有一个地址时才有效。

于 2010-10-16T22:53:22.617 回答