iOS 9、10 CoreData:无法在路径加载优化模型 [英] iOS 9, 10 CoreData: Failed to load optimized model at path

查看:31
本文介绍了iOS 9、10 CoreData:无法在路径加载优化模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了新版本的 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-ManagerFFFappA99B59-4422-BA0A-0FD0D1妈妈/咖啡厅经理v2.omo'

iOS 10:

<块引用>

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

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

文件夹包含以下文件:

适用于 iOS 9 的 AppDelegate CoreData 堆栈:

//MARK: - iOS 8+ 的核心数据栈静态 var managedObjectContext: NSManagedObjectContext = {var applicationDocumentsDirectory: URL = {让 urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)返回网址[urls.count-1]}()var managedObjectModel: NSManagedObjectModel = {let modelURL = Bundle.main.url(forResource: "CafeManager", withExtension: "momd")!返回 NSManagedObjectModel(contentsOf: modelURL)!}()varpersistentStoreCoordinator: NSPersistentStoreCoordinator = {让 a = managedObjectModel.entities让 coordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)让 url = applicationDocumentsDirectory.appendingPathComponent("SingleViewCoreData.sqlite")打印(网址)做{让选项 = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]尝试 coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: options)} 抓住 {NSLog("为 iOS 8+ 初始化 smStore 时出错 - (error.localizedDescription)")}返回协调员}()让协调器=persistentStoreCoordinatorvar managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)managedObjectContext.persistentStoreCoordinator = 协调器返回 managedObjectContext}()

苹果开发者论坛

可能重复这个问题.

解决方案

似乎是优化模型版本在 < 上的问题.iOS 11.只需使用未优化的 .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)守卫 var url = omoURL ??momURL else { fatalError("模型版本 (self) 未找到") }//使用未优化的模型版本 <iOS 11if #available(iOS 11, *) {} else { if let momURL = momURL { url = momURL} }守卫让模型 = NSManagedObjectModel(contentsOf: url) else {fatalError("无法在 (url) 处打开模型") }回报模式}

如果你在想,我想要我的速度,为什么我要使用未经优化的东西,阅读这个 回答.

I have created new version of CoreData model and migrated existing one to it. Application works without any issues on iOS 9+, but for iOS 9 and 10 I am getting this error:

2017-10-22 19:28:37.081 CafeManager[16654:1918728] CoreData: Failed to load optimized model at path '/Users/dj-glock/Library/Developer/CoreSimulator/Devices/A81AA9C4-7B59-4422-BA0A-0FD0D1A05205/data/Containers/Bundle/Application/DD66571C-4EB6-4A8B-A99B-B447DD0FFFBA/CafeManager.app/CafeManager.momd/CafeManager v2.omo'

iOS 10:

CoreData: annotation: Failed to load optimized model at path '/Users/dj-glock/Library/Developer/CoreSimulator/Devices/3708F142-3BD0-4C70-8515-217B7785D285/data/Containers/Bundle/Application/3842402F-BEAE-47CB-8C27-EC6CA7D76B03/CafeManager.app/CafeManager.momd/CafeManager v2.omo'

I have checked a lot of similar questions, but did not find solution for me. I have tried to re-install app on simulator, to re-launch and so on. Can anybody advise?

Folder contains the following files:

AppDelegate CoreData stack for iOS 9:

// 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

Possible duplicate of this question.

解决方案

It seems to be the problem with optimized model versions on < iOS 11. Just use unoptimized .mom model version instead (CafeManager v2.mom).

Here's how I fixed it:

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
}

If you're thinking, I want my speed, why would I use something unoptimized, read this answer.

这篇关于iOS 9、10 CoreData:无法在路径加载优化模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆