所以我有以下实体:
class Person: NSManagedObject {
@NSManaged var name: String
@NSManaged var dogs: NSSet
}
class Dog: NSManagedObject {
@NSManaged var name: String
@NSManaged var owner: NSManagedObject
}
而且我认为我必须尝试五种不同的方式来设置狗NSSet和所有者NSManagedObject,都没有运气。
self.mutableSetValueForKey("dogs").addObject(newDog)
崩溃并抛出"由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' *** - [NSSet intersectsSet:]:set参数不是NSSet&#39 ;"
我尝试了以下两个选项:
var newDogs = [newDog]
var setOfDogs = NSSet(array: newDogs) as Set<NSObject>
self.dogs.setByAddingObjectsFromSet(setOfDogs)
self.dogs.setByAddingObjectsFromArray(newDogs)
既没有抛出也没有异常,但是在使用其中任何一个/两个之后,self.dogs都是空的。
另外,在设置dog.owner时,我该怎么做?我知道有一些方法是dog.owner.setValue(Value,Key),但我不确定值和键是指什么,文档也没有超级帮助。
我知道这里有一些类似的问题,但它们似乎都在Obj-C中,而且我在跟踪它们时遇到了麻烦。任何建议表示赞赏,谢谢!
答案 0 :(得分:2)
首先,如果你继承NSManagedObject
,你应该使用子类:
@NSManaged var owner : Person
其次,您不必关心在一对多关系中设置NSSet
的复杂性。相反,只需设置为一对一的关系。
dog.owner = person
就是这样。
最后,为了将来参考,以下是您设置/修改NSSet
的方法。当您拥有多对多关系时,这是必要的。
let items = self.mutableSetValueForKey("dogs")
items.addObject(newDog)
您可以通过向NSManagedObject
子类添加便捷方法来简化此操作。