ios - iOS 核心数据中的多个上下文

标签 ios objective-c core-data

我有几个关于在我的应用程序的核心数据中创建托管对象上下文的问题,如果你能帮忙,请...

为简化起见,假设我的应用程序是一个实体 Street 和另一个实体 House。每个Street对象都有各种属性,包括House对象的一个​​属性houseList(NSArray)(Transformable类型)。如果我不引入 House 实体并且只有 Street 的核心数据,一切正常,我可以保存上下文,加载给定街道中的所有 House 对象等。

但是当我为 House 创建一个实体(我将它保存在与 Street 相同的 MOC 中)并运行 setHouseList 时,下次我启动应用程序时,我会收到常见的错误“CoreData: error: Failed在 NSManagedObject 类“House”上调用指定的初始化程序”。以下是我对此的疑问...

  1. 这种情况是否也意味着我有不同的线索在起作用?为无知而道歉,但根据我的理解,这里没有后台线程执行并行更新,因此理想情况下,这些线程不是单独的线程,因此我不应该需要单独的托管对象上下文。

  2. 我什至尝试在应用程序委托(delegate)中声明一个新的 MOC 属性,并将其传递给调用 setHouseList 的 View Controller ,然后还将所有 House 对象保存在这个新的 MOC 中。这也没有帮助,我得到了同样的错误。

  3. 我怀疑如果我使用新的 MOC,我可能必须在调用 setHouseList 时使用 ObjectID,但不知何故我无法理解如何做到这一点...我进一步研究了 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Concurrency.htmlhttps://www.cocoanetics.com/2012/07/multi-context-coredata/链接但没有取得任何进展...任何意见将不胜感激!

谢谢!

最佳答案

你真的应该在 House 之间建立一对多关系和 Street实体,其中一个 Street可以有很多House es与之相关。

如果顺序很重要(我想它不会很重要),那么您可以将关系建模为 NSOrderedSet , 虽然NSSet听起来在这种情况下就好了。

class Street: NSManagedObject {
    @NSManaged var houses: NSOrderedSet
}

class House: NSManagedObject {
    @NSManaged var street: Street
}

然后,当您创建对象时,设置 street House 上的属性(property)并添加 Househouses 的集合在 Street 上.

func addHouse(house: House) {
    let houses = self.mutableSetValueForKey("houses")
    houses.addObject(house)
}

核心数据将处理那里的其余部分。

关于ios - iOS 核心数据中的多个上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784088/

相关文章:

ios - NSUndomanager 更改是否在使用 CoreData 的启动之间持续存在

ios - 如何在 iOS 上打开 Google Maps URL Scheme?

ios - 在哪里保存 iOS 应用程序中的数据库?

ios - 无法在导入另一个框架的 Xcode 项目中运行测试

ios - 顺利停止 CABasicAnimation

objective-c - 您如何找出在 Instruments 中保留对象的内容?

ios - 如何在 Swift 3 + Optional + NSOrderedSet + Generic 中优雅地使用 Core Data

ios - 像 Instagram api 一样设置

objective-c - 如何在NSArray上使用自定义排序

ios - 或者逻辑运算符在 [NSPredicate predicateWithFormat :] 中不起作用