NSPersistentContainer 不创建数据库文件

Posted

技术标签:

【中文标题】NSPersistentContainer 不创建数据库文件【英文标题】:NSPersistentContainer doesnt create database file 【发布时间】:2017-09-05 15:48:17 【问题描述】:

我正在创建一个 NSPersistentContainer 来保存一些数据,但即使在上下文中调用 save() 也不会创建任何数据库文件。

我用于创建 NSPersistentContainer 的代码是:

let container = NSPersistentContainer(name: "Model")

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

container.persistentStoreDescriptions = [description]

container.loadPersistentStores  ... 

【问题讨论】:

【参考方案1】:

我期待通过 NSPersistentStoreDescription 设置自动迁移选项不会有问题,并且容器将使用默认存储文件路径;但事实并非如此。

原来没有回退到该默认路径,因此必须提供您自己的路径,这可以解决问题:

let container = NSPersistentContainer(name: "Model")

let dbURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!.appendingPathComponent("DB.sql")
let description = NSPersistentStoreDescription(url: dbURL)
description.shouldInferMappingModelAutomatically = true
description.shouldMigrateStoreAutomatically = true

container.persistentStoreDescriptions = [description]

container.loadPersistentStores  ... 

【讨论】:

以上是关于NSPersistentContainer 不创建数据库文件的主要内容,如果未能解决你的问题,请参考以下文章

CoreData多个NSPersistentContainer实例导致Multiple NSEntityDescriptions +entity unable disambiguate的解决

NSPersistentContainer / 核心数据 / 只读存储

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

NSPersistentContainer, performBackgroundTask, 调用 perform 啥都不做

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

如何在 AppDelegate 中包含 NSPersistentContainer