iPhone - 核心数据问题?

时间:2010-10-16 20:52:49

标签: iphone core-data nsentitydescription

我有2个实体:用户,地址。 我已经设置了每个用户可以有很多“地址”的关系。 我不确定核心数据是如何工作的,但根据我的理解,每次调用insertEntityForName时它都会创建并存储一个对象。 (也是表格中的一行)

所以问题是: 以下代码是否在核心数据中存储重复的地址?

  1. 当我插入用户实体时 还插入地址
  2. 当我呼叫插入地址时 它创建了另一个地址。
  3. 如果我是正确的,这实际上在数据库中创建了一个副本,防止它的方法是什么?

    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 个答案:

答案 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仅在用户只能有一个地址时才有效。