アプリデリゲートにこの機能を含むコアデータ迅速なプロジェクトに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 に到達することはありません。
編集 2バックトレースのスクリーンショットを追加 (?)