在 swift 中保存 NSManagedObjectContext 时出错

Error saving NSManagedObjectContext in swift

我正在使用 Xcodes 为核心数据 swift 项目自动生成的代码,该项目在应用程序委托中包含此功能:

func saveContext () {
        if let moc = self.managedObjectContext {
            var error: NSError? = nil
            if moc.hasChanges && !moc.save(&error) {
                // Replace this implementation with code to handle the error appropriately.
                // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                NSLog("Unresolved error \(error), \(error!.userInfo)")
                abort()
            }
        }
    }

当我的托管对象出现错误而不是打印包含错误详细信息的消息时,应用程序崩溃并出现 EXC_BAD_INSTRUCTION 错误。

the documentation 中说:

A pointer to an NSError object. You do not need to create an NSError object. The save operation aborts after the first failure if you pass NULL.

应用程序是否因为 error 为零而中止? 这是错误还是这是预期的行为? (如果这是预期的,我应该采取什么方法来从错误中恢复而不是崩溃?)

(我是 运行 Xcode 6.3.1)

编辑 1: 错误出现在 moc.save 函数中,而不是来自 abort() - 例如注释掉 abort 不会停止崩溃,并且永远不会到达 NSLog。

编辑 2 添加回溯的屏幕截图 (?)

我首先调查了导致错误的原因。我以为这是一个简单的模型验证错误(试图保存一个缺少必需属性的对象),但我的所有属性都是可选的。

事实证明问题出在我试图保存不采用 NSCoding 的对象数组的 Transformable 属性上。

我已经修复了这个问题并尝试故意导致其他类型的错误(例如模型验证)并且 save 函数按预期工作。

遗憾的是我没有得到关于可变形事物的合理错误,但很高兴它在其他方面有效,并且是一次很好的学习体验!