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

时间:2018-01-16 12:59:33

标签: 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
}()

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

1 个答案:

答案 0 :(得分:0)

我建议使用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
}()