关于在我的应用中的核心数据中创建托管对象上下文,我有几个问题,如果你能帮忙请...
为了简化,请说我的应用程序是实体街和另一个实体House。每个Street对象都有各种属性,包括House对象的属性houseList(NSArray)(可转换类型)。如果我不介绍House实体并且只为Street提供Core Data,那么一切正常,我可以保存上下文,加载给定街道中的所有House对象等。
但是当我为House创建一个实体(我将它保存在与街道相同的MOC中)并运行setHouseList时,下次启动应用程序时,我得到通常的错误“ CoreData:错误:失败在NSManagedObject类'House'上调用指定的初始化程序“。以下是我的问题......
这种情况是否意味着我有不同的线程在玩?为无知道歉,但根据我的理解,这里没有后台线程进行并行更新,所以理想情况下这些不是单独的线程,因此我不应该要求单独的托管对象上下文。
我甚至尝试在app委托中声明一个新的MOC属性,并将其传递给调用setHouseList的视图控制器,然后还保存了这个新MOC中的所有House对象。这也没有帮助,我得到同样的错误。
我怀疑如果我使用新的MOC,我可能必须在调用setHouseList时使用ObjectID,但不知何故无法理解如何做到这一点...我已经进一步完成{{3 }}和https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Concurrency.html链接,但没有取得任何进展......任何输入都将非常感谢!
谢谢!
答案 0 :(得分:2)
您确实应该在House
和Street
个实体之间设置多对多关系,其中一个Street
可以有多个与此关联的House
个。{/ p >
如果订单很重要(我认为它不会是这样),那么你可以将关系建模为NSOrderedSet
,尽管NSSet
听起来就好像这样就好了情况下。
class Street: NSManagedObject {
@NSManaged var houses: NSOrderedSet
}
class House: NSManagedObject {
@NSManaged var street: Street
}
然后,当您创建对象时,在street
上设置House
属性,并将House
添加到houses
上的Street
集上{1}}。
func addHouse(house: House) {
let houses = self.mutableSetValueForKey("houses")
houses.addObject(house)
}
核心数据将从那里处理休息。