【发布时间】:2019-01-30 09:26:57
【问题描述】:
我有一个 iOS 应用程序,我想在每次启动时从一个新的 Core Data 数据库开始。商店类型是 SQLite。
但是,当我调用 persistentStoreCoordinator.destroyPersistentStore() 时,我 100% 都会收到错误。
代码如下:
func destroyPersistentStore() {
guard let modelURL = Bundle.main.url(forResource: self.modelName, withExtension: "momd") else {
print("Missing data model - could not destroy")
return
}
do {
try persistentStoreCoordinator.destroyPersistentStore(at: modelURL, ofType: storeType, options: nil)
} catch {
print("Unable to destroy persistent store: \(error) - \(error.localizedDescription)")
}
}
错误是:
无法销毁持久存储:错误域=NSSQLiteErrorDomain Code=14 "(null)" UserInfo={NSFilePath=.../AppName.app/ModelName.momd, 原因=无法截断数据库} - 无法执行该操作 完全的。 (NSSQLiteErrorDomain 错误 14。)
即使出现此错误,该应用仍能够保存和访问商店中的数据。问题是每次启动时都会加载初始数据,从而创建重复项。
下面是调用destroyPersistentStore的地方:
- SQLite 数据文件肯定存在并包含数据
- 发生在模拟器或真实设备上
- modelUrl 是正确的,并且指向了 momd
- 存储类型为 SQLite
- SQLite 数据文件保存在 Documents 目录中
- persistentStoreCoordinator.url(for: persistentStoreCoordinator.persistentStores.first!) 指向 Documents 目录中的文件。
我在网上搜索了答案,找不到任何人报告这个错误,但我在这个项目和一个简化的演示项目中都有这个错误。我根本无法让 destroyPersistentStore 工作。
最后,当我暂停执行并 po 到 persistentStoreCoordinator.managedObjectModel 时,第一行是:
po persistentStoreCoordinator.managedObjectModel () isEditable 0, 实体...
isEditable 问题可能是问题所在吗?我将如何改变它?
【问题讨论】: