【问题标题】:iOS 9, 10 CoreData: Failed to load optimized model at pathiOS 9、10 CoreData:无法在路径加载优化模型
【发布时间】:2023-12-30 01:15:01
【问题描述】:

我创建了新版本的 CoreData 模型并将现有模型迁移到它。应用程序在 iOS 9+ 上运行没有任何问题,但对于 iOS 9 和 10,我收到此错误:

2017-10-22 19:28:37.081 CafeManager[16654:1918728] CoreData:未能 在路径加载优化模型 '/Users/dj-glock/Library/Developer/CoreSimulator/Devices/A81AA9C4-7B59-4422-BA0A-0FD0D1A05205​​/data/Containers/Bundle/Application/DD66571C-4EB6-4A8B-A99B-B447DD0FFFBA/CafeManager.app/CafeManager。妈妈/咖啡厅经理 v2.omo'

iOS 10:

CoreData:注释:无法在路径加载优化模型 '/Users/dj-glock/Library/Developer/CoreSimulator/Devices/3708F142-3BD0-4C70-8515-217B7785D285/data/Containers/Bundle/Application/3842402F-BEAE-47CB-8C27-EC6CA7D76B03/CafeManager.app/CafeManager。妈妈/咖啡厅经理 v2.omo'

我检查了很多类似的问题,但没有找到适合我的解决方案。我试图在模拟器上重新安装应用程序,重新启动等等。有人可以建议吗?

文件夹包含以下文件:

iOS 9 的 AppDelegate CoreData 堆栈:

// MARK: - Core Data stack for iOS 8+
static var managedObjectContext: NSManagedObjectContext = {
    var applicationDocumentsDirectory: URL = {
        let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return urls[urls.count-1]
    }()

    var managedObjectModel: NSManagedObjectModel = {
        let modelURL = Bundle.main.url(forResource: "CafeManager", withExtension: "momd")!
        return NSManagedObjectModel(contentsOf: modelURL)!
    }()

    var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
        let a = managedObjectModel.entities
        let coordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
        let url = applicationDocumentsDirectory.appendingPathComponent("SingleViewCoreData.sqlite")
        print(url)
        do
        {
            let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
            try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: options)
        } catch {
            NSLog("Error initializing smStore for iOS 8+ - \(error.localizedDescription)")
        }
        return coordinator
    }()
    let coordinator = persistentStoreCoordinator
    var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
    managedObjectContext.persistentStoreCoordinator = coordinator
    return managedObjectContext
}()

Apple developer forum

this question 可能重复。

【问题讨论】:

  • 你在使用任何 pod 吗?
  • 是的。我使用 Seam3。我也导入了 Charts 框架,但不是通过 pod。
  • 不确定你是否已经解决了,但我通过重写 CoreDataModel 修复了我的问题。对内容进行了截图,删除了文件并创建了一个新的 CoreDataModel。然后重写所有属性,由于某种原因问题解决了。希望对你有帮助
  • @DJ-Glock 我知道这是一个相当老的问题,但如果您仍然需要解决方案,请查看我的suggestion
  • @mijokaliger 感谢您的帮助!我用过你的方法。它工作正常。

标签: ios swift core-data ios9 ios10


【解决方案1】:

这似乎是 .mom 模型版本 (CafeManager v2.mom)。

这是我修复它的方法:

public func managedObjectModel() -> NSManagedObjectModel {
    let omoURL = modelBundle.url(forResource: name, withExtension: "omo", subdirectory: modelDirectoryName)
    let momURL = modelBundle.url(forResource: name, withExtension: "mom", subdirectory: modelDirectoryName)
    guard var url = omoURL ?? momURL else { fatalError("model version \(self) not found") }
    // Use unoptimized model version < iOS 11
    if #available(iOS 11, *) {} else { if let momURL = momURL { url = momURL} }
    guard let model = NSManagedObjectModel(contentsOf: url) else { fatalError("cannot open model at \(url)") }
    return model
}

如果您在想,我想要我的速度,我为什么要使用未优化的东西,请阅读this 答案。

【讨论】:

    最近更新 更多