核心数据单个实体的多个对象

时间:2014-02-03 08:58:08

标签: ios core-data

我是Core Data的新手。我正在尝试使用Core Data创建员工数据库。我将用户名和他的生日存储在实体Employee中,员工可以拥有多个电话号码。所以我创建了另一个实体PhoneNumbers来存储电话号码。我已经为这两个实体建立了关系。但是当我尝试为员工插入两个电话号码时,只有第二个电话号码与员工有关系。

我不知道如何改变我的核心数据模型。

enter image description here

这是我将数据插入核心数据的方式。

  NSManagedObject *entry = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_managedObjectContext];
[entry setValue:@"Suresh" forKey:@"name"];
[entry setValue:[NSDate date] forKey:@"birthdate"];

NSManagedObject *phoneEntry = [NSEntityDescription insertNewObjectForEntityForName:@"PhoneNumbers" inManagedObjectContext:_managedObjectContext];
[phoneEntry setValue:@"9600492944" forKey:@"phone"];

[phoneEntry setValue:entry forKey:@"owner"];
[entry setValue:phoneEntry forKey:@"phone"];

NSError *error = nil;
if (![_managedObjectContext save:&error]) {
    NSLog(@"hi %@", [error localizedDescription]);
}

NSManagedObject *phoneEntry1 = [NSEntityDescription insertNewObjectForEntityForName:@"PhoneNumbers" inManagedObjectContext:_managedObjectContext];
[phoneEntry1 setValue:@"1234567890" forKey:@"phone"];

[phoneEntry1 setValue:entry forKey:@"owner"];
[entry setValue:phoneEntry1 forKey:@"phone"];

if (![_managedObjectContext save:&error]) {
    NSLog(@"hi %@", [error localizedDescription]);
}

3 个答案:

答案 0 :(得分:2)

那是因为你没有正确地设定关系。正如您在附加的屏幕截图中看到的那样,它显示指向电话号码的单箭头(如此>)而不是2个箭头(如此>>)。所以点击员工实体,单击电话关系。您可以在右侧看到工具栏,单击关系按钮(第三个),将类型设置为多个。它会解决你的问题。此外,如果您希望自动删除与此人相关的电话号码实体,请将删除规则设置为级联。希望它有所帮助。

答案 1 :(得分:1)

您的关系必须是一对一 - 从您的屏幕截图中我看到您有一对一的关系。重新定义这种关系,它应该有效。

答案 2 :(得分:1)

在您的coredata模型中,选择员工实体中的关系电话并将其类型更改为“To Many”...它将创建Employee和PhoneNumbers之间的关系作为一对多关系。

更改上述内容后,您可以为员工存储多个电话号码......