gpt4 book ai didi

swift - Swift 2 和 Swift 3 中的核心数据 momd 扩展

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:57 24 4
gpt4 key购买 nike

我最近将应用程序的语法从 Swift 2 升级到 Swift 3,应用程序现在崩溃并出现致命的错误:

unexpectedly found nil while unwrapping an Optional value.

Swift 2 是:

    private lazy var managedObjectModel: NSManagedObjectModel = {

let modelURL = NSBundle.mainBundle()
.URLForResource(self.modelName,
withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()

Swift 3 的更新是:

    private lazy var managedObjectModel: NSManagedObjectModel = {

let modelURL = Bundle.main
.url(forResource: self.modelName,
withExtension: "momd")!
return NSManagedObjectModel(contentsOf: modelURL)!
}()

Swift 3 不喜欢“momd”扩展名的原因是什么?该应用程序在 Swift 2 中运行,用户无需任何预加载即可从应用程序内部构建数据库,因此正在创建和使用 url 文件 modelName.momd。 modelName 声明为:

let modelName = "GameCountPro"

最佳答案

我在 AppDelegate 中遇到了同样的问题

let modelURL = Bundle.main.url(forResource: "CoreDataPractise", withExtension: "momd")!

'forResource' 中的名称应该与您的数据模型完全匹配

"CoreDataPractise.xcdatamodeld".

因为 Swift 3.1 没有提供 CoreData 堆栈样板代码,我从另一个旧项目复制了所有惰性变量代码,该项目实际上有名为 "CoreDataDemo.xcdatamodeld" 的数据模型。由于这种不匹配,应用程序崩溃了,尽管在“强制展开”点的崩溃是一个误导,让你认为这可能是由于强制展开。

此修复后立即解决了 momd! 崩溃问题。

在您的情况下,检查“URLForResource(self.modelName,...”是否准确地为您提供了项目中的数据模型名称,而不是 "optional(dataModel name)"

关于swift - Swift 2 和 Swift 3 中的核心数据 momd 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39981154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com