我有2个实体:用户,地址。 我已经设置了每个用户可以有很多“地址”的关系。 我不确定核心数据是如何工作的,但根据我的理解,每次调用insertEntityForName时它都会创建并存储一个对象。 (也是表格中的一行)
所以问题是: 以下代码是否在核心数据中存储重复的地址?
如果我是正确的,这实际上在数据库中创建了一个副本,防止它的方法是什么?
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;
答案 0 :(得分:3)
不,这不会创建重复的地址。使用第一个插入时,它只会创建User
,而不是Address
。用户的地址为零。
如果您真的确实与用户进行了一对多的Address
关系,则无法像这样分配user.address
,它应该发出警告,因为它期待{{1} }。我也建议叫它NSSet*
。你可以这样做:
addresses
或
user.address = [NSSet setWithObject:address];
答案 1 :(得分:0)
CoreData不仅限于数据库,它也可以在内存中工作或使用XML。以下是使用sqlite商店时的情况。
核心数据在用户表中插入一行,在地址表中插入一行。如果一个地址只能有一个用户,那么它会将一个列(在设置数据库时)添加到包含用户条目id的地址表中。这就是两者如何联系起来的。如何创建链接也无关紧
user.address = XY;或XY.user = user;
然而,user.address = XY仅在用户只能有一个地址时才有效。