ios - CoreData - 数据库损坏后重新创建持久存储

标签 ios swift core-data

我想实现一种方法,当存储由于迁移或保存失败而损坏时,该方法将重新创建新的持久存储。我有以下代码:

lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "test")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
    if let error = error {
        do {
            try container.persistentStoreCoordinator.destroyPersistentStore(at: NSPersistentContainer.defaultDirectoryURL(), ofType: NSSQLiteStoreType, options: nil)
                // what to do here?
            } catch let error {
                print ("\(error)")

            }
        print("Unresolved error \(error)")
    }
    })
    return container
}()

我实现了销毁持久存储,当它被破坏时,但我在文档中找不到可用的东西,哪种方法可以重新创建它。也许有人遇到此类问题?

最佳答案

我建议使用CoreStore管理您的 CoreData。如果发生错误,它会自动重新创建您的数据库。如果您开始使用以下代码初始化数据库,它还会检查您当前的状态并修复所有内容(如果可能):

let dataStack: DataStack = {
    let dataStack = DataStack(xcodeModelName: "ModelName")
    do {
        try dataStack.addStorageAndWait(SQLiteStore(fileURL: storagePathUrl, configuration: "Default", localStorageOptions: .
            recreateStoreOnModelMismatch))
    } catch let error {
        print("Cannot set up database storage: \(error)")
    }
    return dataStack
}()

关于ios - CoreData - 数据库损坏后重新创建持久存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48281869/

相关文章:

ios - View Controller 中的多个 uitableview 给出错误

ios - 合并多个子托管对象上下文

ios - 如何获取用户当前位置和其他一些坐标是否相同?

ios - 将 SpriteKit 物理模拟推进到稳定的静止状态

ios - 触摸 "buy"后应用内购买失败

iphone - 核心数据持久性, Unresolved 错误

ios - 检测应用程序是否从后台打开 Swift iOS

ios - 如何根据键盘管理 ScrollView (向上和向下)在 Objective-C 中使用 NSNotificationCenter 在屏幕中显示和隐藏

ios - 保存上下文后立即获取对象 ID