提问人:David.Chu.ca 提问时间:5/8/2022 最后编辑:David.Chu.ca 更新时间:5/8/2022 访问量:117
首次加载 iOS 核心数据数据库失败
Failure to load iOS core data database first time
问:
在我的 iOS 应用程序中,我的数据库位于文件夹的文件夹中。Hare是用于创建此文件夹(如果不存在)的代码:Application support/myDatabase
class MyDatabaseURLHelper {
private databaseBase: URL {
let baseDir: FileManager.SearchPathDirectory =
.applicationSupportDirectory
let subDir = "myDatabase"
var url = FileManager.default.urls(
for: baseDir,
in: .userDomainMask).first!.appendPathComponent(subDir)
return url
}
func databaseURL() -> URL? {
var url: URL? = databaseBase
let dbName = "MyDatabaseFile"
if !FileManager.default.fileExists(atPath: url.path) {
do {
try FileManager.default.createDirectory(
atPath: databaseBase.path,
withIntermediateDirectories: true,
attributes: nil)
} catch {
url = nil
}
return url?.appendPathComponent(dbName)
}
}
我已经测试了上面的代码。如果不存在,则创建数据库子文件夹(第一次),并且数据库 url 看起来正常。
这是我加载数据库的代码片段:
let modelName = "MyDatabase"
let container = NSPersistentContainer(name: modelName)
let url = MyDatabaseURLHelper().databaseURL()!
let storeDesription = NSPersistentStoreDescription(url: url)
storeDesription.shouldInferMappingModelAutomatically = true
storeDesription.shouldMigrateStoreAutomatically = true
container.persistentStoreDescriptions = [storeDesription]
container.loadPersistentStores() {
(storeDescription, error) in
if let error = error as NSError? {
let msg = "Unresolved error \(error), \(error.userInfo)"
fatalError(msg) // <- I got exception here! if database file does not exist first time.
}
}
return container // No errors if database exists
我的应用程序对现有用户运行正常,因为他们有 db 文件。但是,对于新用户,我的应用程序崩溃了。新用户在首次运行时没有数据库。我在 Xcode 模拟器中验证了相同的结果。
以下是错误消息:
*"Unresolved error Error Domain=NSCocoaErrorDomain Code=256 \"The file “MyDatabase” couldn’t be opened.\" UserInfo={NSFilePath=/Users/.../Application/8DBC6D4F-967C-433D-9B28-60451CDAECDB/Library/Application Support/myDatabase, \"NSSQLiteErrorDomain\": 14]"*
不确定在最近的 iOS (15.4) 中发生了哪些变化。加载持久性存储时缺少什么?
答: 暂无答案
评论