如何使用一对多关系将对象与CoreData中的另一个对象相关联?

时间:2015-08-17 01:46:40

标签: ios swift core-data

enter image description here enter image description here

我在使用实体时非常擅长处理核心数据,但是因为我已经开始玩关系,所以我已经碰到了一些我无法看到的墙壁在尝试寻找解决方案多天之后,我仍然会爬过去。我有一个名为" EntityOne"的实体。 - 出于简单的原因 - 以及第二个" EntityTwo"实体。 EntityOne与EntityTwo有一对多的关系。基本上我在保存到我的managedObjectContext时尝试将一个或多个EntityTwo对象附加到EntityOne,而不先保存EntityOne,然后在获取结果后将EntityTwo对象附加到它。保存到持久存储时,如何将它们连接在一起?

这是我对实体描述和managedObjects的声明。

let firstEntity = NSEntityDescription.entityForName("EntityOne", inManagedObjectContext: managedObjectContext!)
let firstItem = NSManagedObject(entity: firstEntity!, insertIntoManagedObjectContext: managedObjectContext!)

let secondEntity = NSEntityDescription.entityForName("EntityTwo", inManagedObjectContext: managedObjectContext!)
let secondItem = NSManagedObject(entity: secondEntity!, insertIntoManagedObjectContext: managedObjectContext!)

通常在不处理关系时,我会像这样保存对象:

    firstItem.attributeOne = titleTextField.text
    managedObjectContext?.save(&error)

firstItem.setValue("\(titleTextField.text)", forKey: "attributeOne"
managedObjectContext?.save(&error)

所以,让我们说在同一个viewController上,我拥有为EntityOne创建对象所需的所有数据,以及一个或多个EntityTwo类型的对象要附加到该EntityOne对象,我将如何继续这样做?非常感谢所有帮助过的人。干杯!

1 个答案:

答案 0 :(得分:1)

更容易设置“从另一个方向”的关系,因为它是一个:

secondItem.entityOne = firstItem

但这并没有真正回答你的问题。 to-many关系表示为NSSet,因此您可以使用:

firstItem.entityTwo = NSSet(object: secondItem)

firstItem.entityTwo = NSSet(array: [secondItem, thirdItem])

如果您从没有相关项目开始,但是要将项目添加到现有集合中,则可以这样做:

var myRelatedItems : NSMutableSet = firstItem.mutableSetValueForKey("entityTwo")
myRelatedItems.addObject(secondItem)