同一模型Swift CoreData中的多对多关系

时间:2016-11-18 20:26:30

标签: ios swift core-data many-to-many relationship

我正在尝试在Swift中为Coredata映射多对多的关系。问题是关系是同一个对象。示例:Person对象与许多其他Person对象以及逆对象具有关系。人A与人B和人C有关系。人B也与人D和人A有关系。

以下是代码:

//Person.swift 
var id: Int = 0
var linkedPersonObjects: [PersonObject] = []
var linkedPeople: [Person] = []

required init(object: PersonObject) {

    self.id = Int(object.id)

    ...

    if let linkedPersonSet = object.linkedPeople where linkedPersonSet.count > 0 {
        guard let linkedPersonArray = linkedPersonSet.allObjects as? [PersonObject] else { return }
        for linkedPerson in linkedPersonArray {
            self.linkedPersonObjects.append(linkedPerson)
        }
    }

 }

 func update(oldPerson: PersonObject) -> PersonObject {

    oldPerson.populate(self)

    // Add linkedPeople
    let linkedSet = oldPerson.mutableSetValueForKey("linkedPeople")
    linkedSet.removeAllObjects()

    for linkedPerson in linkedPeople {
        linkedSet.addObject(linkedPerson.insertOrUpdate())
    }

    return oldPerson
}

func insert() -> PersonObject {

    assert(self.id == 0 || CoreDataUtils.findObjectWithId(Models.person, id: self.id) == nil, "ID \(self.id) already exists.")
    //creates and populates a new PersonObject
    let newPerson = PersonObject(person: self, context: context)

    //Adds contacts to linked contacts relationship
    let linkedSet = newPerson.mutableSetValueForKey("linkedPeople")
    for linkedPerson in linkedPeople {
        linkedSet.addObject(linkedPerson.insertOrUpdate())
    }

    return newContact

}

我认为我有一些工作,但每次我将人B和人C添加到人A,那么人B下的任何关系都不再可见;但是,A人将适当地拥有B人和C人。

我不确定我是否会以正确的方式解决这个问题,或者我是否有完全消错的事情。

0 个答案:

没有答案