我正在尝试在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人。
我不确定我是否会以正确的方式解决这个问题,或者我是否有完全消错的事情。