当前位置: 首页 > 面试题库 >

iOS 9、10 CoreData:无法在路径上加载优化模型

锺离韬
2023-03-14
问题内容

我创建了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.momd/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.momd / 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
}()

苹果开发者论坛


问题答案:

在<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)
    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
}


 类似资料:
  • 当我调用我的api时,在ios9中遇到了这个错误,但它在ios8中运行良好,资源无法加载,因为应用程序传输安全策略要求使用安全连接

  • 我使用brew安装了flyway,我正在尝试为postgres运行迁移,但我遇到了以下错误: Boxfuse的Flyway 4.2.0 错误:无法加载 /usr/local/Cellar/flyway/4.2.0/libexec/drivers/postgresql-9.4.1208.jre6.jar 我已经检查了这个路径,并且目录和文件存在。 有什么建议吗?

  • 我正在用RubyonRails编写这个应用程序,我将应用程序设置为从特定路径提供GeoJson。我想让Mapbox从指定路径获取GeoJson,并将其添加到地图中。下面是我创建地图的javascript代码 当我导航到时,我得到以下响应。 地图加载得很好,但没有形状。令人沮丧的是,浏览器中没有错误,GeoJson在GeoJson.io上签出。 我做错了什么?

  • My仅包含一个对SLF4J的引用: 我检查了那个URL,它确实提供了一个解决方案:“在类路径上放置一个(而且只有一个)slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar应该可以解决问题。” 我的问题是:哪个类路径? 系统的%classpath%?(我没有!我需要专门为此创建它) E

  • 问题内容: 有一个maven项目A。执行mvn全新安装后,将构建项目,并且该jar在我的本地存储库中可用,即 A.jar包含几个类和这些类使用的xml文件 从另一个Maven项目中,我正在调用使用一个XML文件的类中的一种方法。 代码是: 第二个项目位于我的D盘中。在获得绝对路径时,我得到的是\ com \ stackoverflow \ A \ res \ p.xml,这是正确的绝对路径。 但是

  • 问题内容: 使用此代码设置类路径 以下是AwsCredentials.properties文件的格式 以下是我得到的例外 问题答案: 因为您的AWS开发工具包无法加载您的凭证,所以您将收到此异常。您应该执行的操作是转到“首选项”,然后转到“ AWS”并添加您的秘密密钥和访问密钥。这样您的项目就可以检索两个密钥。