NSEntityDescription.insertNewObject函数在Swift 3中导致崩溃

时间:2016-09-23 16:26:04

标签: ios core-data swift3 nsmanagedobject nsentitydescription

我正在关注this tutorial的这篇介绍教程,对Core Data来说是全新的。

这是产生错误的类(但是错误将我发送到带有sigabrt的AppDelegate的第一行。以“let newUser”开头的行似乎产生错误,因为当我将其注释掉时错误消失了

@IBAction func btnSave(){
    let appDel:AppDelegate = (UIApplication.shared().delegate as! AppDelegate)
    let context:NSManagedObjectContext = appDel.persistentContainer.viewContext
    let newUser = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context) as NSManagedObject

    do {
        try context.save()
    } catch {}

    print("Object Saved.")    
}

This problem looks similar, but the answer is confusing to me and seems a bit overcomplicated

由于尚未在上述Youtube视频的评论部分发布此错误,我认为这是由于Swift 3的更改而导致的错误(由于Swift 2的更改而导致其他错误,注释)。

非常感谢任何帮助!

frame #0: 0x00000001067cbf06 libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x00000001068ec4ec libsystem_pthread.dylib`pthread_kill + 90
frame #2: 0x000000010651e0b3 libsystem_c.dylib`abort + 129
frame #3: 0x00000001067ea43a libc++abi.dylib`abort_message + 266
frame #4: 0x000000010680ea9f libc++abi.dylib`default_terminate_handler() + 267
frame #5: 0x00000001055be59f libobjc.A.dylib`_objc_terminate() + 103
frame #6: 0x000000010680bc09 libc++abi.dylib`std::__terminate(void (*)()) + 8
frame #7: 0x000000010680b894 libc++abi.dylib`__cxa_rethrow + 99
frame #8: 0x00000001055be4b7 libobjc.A.dylib`objc_exception_rethrow + 40
frame #9: 0x00000001030f7bf1 CoreFoundation`CFRunLoopRunSpecific + 433
frame #10: 0x000000010850ea48 GraphicsServices`GSEventRunModal + 161
frame #11: 0x0000000103b30e8b UIKit`UIApplicationMain + 159
* frame #12: 0x0000000102b5dc6f CoreDataYoutube`main + 111 at AppDelegate.swift:5
frame #13: 0x00000001064726bd libdyld.dylib`start + 1

1 个答案:

答案 0 :(得分:1)

我不是100%确定是什么解决了这个问题...但我认为它可能就像我的.xcdatamodeld文件没有保存我输入的实体和属性数据一样简单,而且不像一切其他我在Xcode中遇到过这种情况,我需要在离开.xcdatamodeld文件之前明确保存(CMD + S),否则如果我点击ViewController或其他任何地方,数据会被立即删除来自Project navigator。

我不确定这只是在我正在使用的Xcode 8.0测试版中是否有错误,但似乎是时候更新到8.1 ...

更新到8.1后,上述解决方案不再有效......

最终更新......我不确定为什么问题再次出现,但我通过删除.xcdatamodeld并制作新问题以同样的方式解决了问题。我也遇到了麻烦,因为我将其名称从Model.xcdatamodeld更改为CoreDataYoutube.xcdatamodeld。如果您这样做,请记住您必须更新AppDelegatelet container = NSPersistentContainer(name: "Model")中的行以匹配。