【发布时间】:2018-02-13 22:40:37
【问题描述】:
我已经成功地使用以下代码创建了我的 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 然后使用 replacePersistentStore(at:destinationOptions:withPersistentStoreFrom:sourceOptions:ofType:) 来恢复我的备份。所以我尝试这样:
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 实现了我想要的结果,但这似乎让我的控制台非常生气。我想正确地做到这一点,没有任何警告。
【问题讨论】:
-
具体是什么不起作用?
-
@TomHarrington 感谢您的回复。它只是不会恢复我原来的核心数据堆栈。例如。我创建了一些核心数据。运行备份。然后更改数据。运行还原。它什么也没做。没有错误。但也不会恢复到进行更改之前。备份似乎正在工作。文件在备份目录中创建。
-
嗨,试试你的代码进行备份和恢复。我没有收到任何错误,但我怎样才能找到我的实体?谢谢
-
如果可能的话,请您添加您的最终工作代码。
标签: ios swift core-data nspersistentstore