我使用以下代码创建了我的PersistentStore的本地备份:
func backup(){
let backUpFolderUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first!
let backupUrl = backUpFolderUrl.appendingPathComponent("backup")
let container = NSPersistentContainer(name: "MyApp")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in })
let store:NSPersistentStore
store = container.persistentStoreCoordinator.persistentStores.last!
do {
try container.persistentStoreCoordinator.migratePersistentStore(store,
to: backupUrl,
options: nil,
withType: NSSQLiteStoreType)
} catch {
print("Failed to migrate")
}
}这似乎很管用。备份文件被创建。这个答案是:Backup core data locally, and restore from backup - Swift建议我需要释放我的NSPersistentContainer,然后使用Backup core data locally, and restore from backup - Swift来恢复备份。所以我就这样做了:
func restoreFromStore(){
let storeFolderUrl = FileManager.default.urls(for: .applicationSupportDirectory, in:.userDomainMask).first!
let storeUrl = storeFolderUrl.appendingPathComponent("MyApp")
let backUpFolderUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first!
let backupUrl = backUpFolderUrl.appendingPathComponent("backup")
let container = NSPersistentContainer(name: "MyApp")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in })
let stores = container.persistentStoreCoordinator.persistentStores
for store in stores {
do {
try container.deall
} catch {
print("Couldnt clear store")
}
}
do{
try
container.persistentStoreCoordinator.replacePersistentStore(at: storeUrl,
destinationOptions: nil,
withPersistentStoreFrom: backupUrl,
sourceOptions: nil,
ofType: NSSQLiteStoreType)
} catch {
print("Failed to restore")
}
}这似乎什么也做不了。我没有收到任何错误或警告,但它似乎也没有恢复我的核心数据的时候,我支持它。
抱歉,我知道这可能是个糟糕的密码。实际上,我实现了我想要使用的全部FileManager的结果,但这似乎让我的控制台非常生气。我想做的很好,没有任何警告。
发布于 2018-02-15 16:03:03
很难确定,但可能的原因是
loadPersistentStores是一个异步操作,这就是为什么它有一个完成块。您可能需要在loadPersistentStores使用的完成块中移动还原代码,以便确保加载已经完成。
https://stackoverflow.com/questions/48776874
复制相似问题