首页 文章

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

提问于
浏览
1

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

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

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 回答

  • 1

    那是因为你没有正确设置关系 . 正如您在附加的屏幕截图中看到的那样,它显示指向电话号码的单箭头(如此>),而不是2个箭头(如此>>) . 因此,单击Employee实体,单击电话关系 . 您可以在右侧看到工具栏,单击关系按钮(第三个)设置 Type as to Many . 它会解决你的问题 . 此外,如果您希望自动删除与此人相关的电话号码实体,请设置 Delete Rule to Cascade . 希望能帮助到你 .

  • 2

    你的关系必须是一对一的 - 从你的截图我发现你有一对一的关系 . 重新定义关系,它应该工作 .

  • 1

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

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

相关问题