NSEntityDescription.entity 崩溃应用程序(SIGABRT)
Posted
技术标签:
【中文标题】NSEntityDescription.entity 崩溃应用程序(SIGABRT)【英文标题】:NSEntityDescription.entity crashes app (SIGABRT) 【发布时间】:2018-07-17 23:02:02 【问题描述】:包含NSEntityDescription.entity
的行正在崩溃并给我错误
线程 1:SIGABRT
我看到其他人问过这个问题,推荐的答案是简单地从头开始删除并重新制作实体。我已经这样做了很多次,我还彻底“清理”了代码,并在我的AppDelegate.swift
文件和这个ViewController
文件中导入了CoreData。有人有建议吗?
override func viewDidLoad()
super.viewDidLoad()
addGesture()
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else return
let managedContext = appDelegate.persistentContainer.viewContext
let stringModelEntity = NSEntityDescription.entity(forEntityName: "StringModels", in: managedContext)!
let stringBundle = NSManagedObject(entity: stringModelEntity, insertInto: managedContext)
self.getJSON(stringBundle)
do
try managedContext.save()
catch let error as NSError
print("Could not save. \(error), \(error.userInfo)")
编辑
由于终于打开调试器,我找到了解决方案,以下链接的“最佳答案”描述并解决了这个问题:Core data: Failed to load model
【问题讨论】:
请提供崩溃日志。 @matt 没有崩溃日志,它只是崩溃而没有输出到控制台。 好的,但仍有回溯。见***.com/questions/7790993/…。 Xcode 为您提供了很多关于 为什么 我们会崩溃的信息。您需要查看该信息以了解发生了什么。 您能否在应用程序的其他地方创建此实体或任何其他实体?我在 Swift Core Data 代码中经常忘记的一件事是将实体的类模块(在数据模型编辑器中)设置为 Current Product Module。 看起来 persistentContainer.storage 在您的调试会话中为零。这与此处相关还是与其他代码有关?也许您将 nil 托管对象上下文发送到NSEntityDescription.entity
?如果是这样,错误似乎在您的 AppDelegate 类中。
【参考方案1】:
这意味着它找不到名为“StringModels”的实体。以我的经验,当程序认为应该存在的东西不存在时,会导致错误 SIGABRT。
我会检查大小写和拼写。
【讨论】:
感谢您的回答。 Model.xcdatamodeld 中的实体被列为“StringModels” - 与上面指定的完全相同。 @mahib 当你崩溃时,你能检查你的 'managedContext' 常量在调试区域内是否为 nil 吗? managedContext 为 nil,如上面的屏幕截图所示,我通过将名称“StringModels”(实体名称)更正为“Model”(文件模型的名称)来修复错误。 xcdatamodeld 并包含实体 StringModels。以上是关于NSEntityDescription.entity 崩溃应用程序(SIGABRT)的主要内容,如果未能解决你的问题,请参考以下文章