NSPersistentContainer / 核心数据 / 只读存储

Posted

技术标签:

【中文标题】NSPersistentContainer / 核心数据 / 只读存储【英文标题】:NSPersistentContainer / Core Data / ReadOnly store 【发布时间】:2017-09-03 11:08:13 【问题描述】:

我刚刚在 Core Data 上设置了一个只读数据存储。它可以工作,但编译器对此有抱怨,我想知道如何解决这个问题。

这里是我在Xcode自动生成模板后修改的相关代码。

lazy var persistentContainer: NSPersistentContainer = 
    let container = NSPersistentContainer(name: "MyApp")

    let appName: String = "MyApp",
    storeUrl = Bundle.main.url(forResource: appName, withExtension: "sqlite")
    var persistentStoreDescriptions: NSPersistentStoreDescription

    let description = NSPersistentStoreDescription()
    description.shouldInferMappingModelAutomatically = true
    description.shouldMigrateStoreAutomatically = true
    description.url = storeUrl

    container.persistentStoreDescriptions = [description]

    container.loadPersistentStores(completionHandler:  (storeDescription, error) in
        if let error = error as NSError? 
             fatalError("Unresolved error \(error), \(error.userInfo)")
        
    )
    return container
()

现在这是我从编译器得到的消息:

[error] CoreData: error: Attempt to add read-only file at path ...../MyApp.app/MyApp.sqlite read/write. Adding it read-only instead. This will be a hard error in the future; you must specify the NSReadOnlyPersistentStoreOption.

如何设置此选项以使编译器满意?

【问题讨论】:

【参考方案1】:

在描述中设置选项

description.setOption(NSNumber(value: true), forKey: NSReadOnlyPersistentStoreOption)

顺便说一句:变量persistentStoreDescriptions 未使用。

【讨论】:

是的,做到了。谢谢。关于 persistentStoreDescriptions 是正确的。

以上是关于NSPersistentContainer / 核心数据 / 只读存储的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 NSPersistentContainer.loadPersistentStores 中的错误?

NSPersistentContainer, performBackgroundTask, 调用 perform 啥都不做

NSPersistentContainer的loadPersistentStores的completionHandler是不是同步运行?

如何在 AppDelegate 中包含 NSPersistentContainer

NSPersistentContainer,performBackgroundTask,调用perform什么都不做

NSPersistentContainer newBackgroundContext 的最佳实践是啥?