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是不是同步运行?