核心数据:设置NSSet Swift

时间:2015-08-30 21:39:13

标签: ios xcode swift core-data

所以我有以下实体:

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中,而且我在跟踪它们时遇到了麻烦。任何建议表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:2)

首先,如果你继承NSManagedObject,你应该使用子类:

@NSManaged var owner : Person

其次,您不必关心在一对多关系中设置NSSet的复杂性。相反,只需设置为一对一的关系。

dog.owner = person

就是这样。

最后,为了将来参考,以下是您设置/修改NSSet的方法。当您拥有多对多关系时,这是必要的。

let items = self.mutableSetValueForKey("dogs")
items.addObject(newDog)

您可以通过向NSManagedObject子类添加便捷方法来简化此操作。