2

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

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

文档中它说:

指向 NSError 对象的指针。您不需要创建 NSError 对象。如果您传递 NULL,则保存操作在第一次失败后中止。

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

(我正在运行 Xcode 6.3.1)

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

EXC_BAD_INSTRUCTION 啊啊啊

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

回溯 悲伤

4

1 回答 1

0

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

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

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

很遗憾我没有为可变形的东西犯下明显的错误,但很高兴它在其他方面有效,并且是一次很好的学习体验!

于 2015-04-25T23:08:30.573 回答