3
我有一個CoreData數據庫與我的應用程序完美配合。數據庫存儲由用戶保存的預設。我想讓用戶能夠使用通過iTunes進行文件共享來備份數據庫。用NSFileManager替換CoreData persistantStore是否安全?
基本上我想:
備份:數據庫 - >文件中的用戶可以在設備之間傳輸
還原:文件 - >數據庫
的最直接方式我以爲只是複製並替換persistentStore。像這樣..
這是我如何創建數據庫:
self.database = [[UIManagedDocument alloc] databaseURL];
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.database.fileURL path]]) {
[self.database saveToURL:self.database.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { }];
}
這是我如何更換persistentStore:
- (void)restoreBackupWithBackupURL:(NSURL *)backupURL {
// close the current document
[self.database closeWithCompletionHandler:^(BOOL success) {
// GET PERSISTENT STORE URL
NSURL *databaseURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
databaseURL = [databaseURL URLByAppendingPathComponent:@"Default Database"];
databaseURL = [databaseURL URLByAppendingPathComponent:@"StoreContent"];
databaseURL = [databaseURL URLByAppendingPathComponent:@"persistentStore"];
// DELETE PERSISTENT STORE
NSError *error;
BOOL deleted = [[NSFileManager defaultManager] removeItemAtURL:databaseURL error:&error];
if (!deleted) {
NSLog(@"Error deleting file: %@", error.localizedDescription);
return;
}
// COPY BACKUP PERSISTENT STORE
BOOL copied = [[NSFileManager defaultManager] copyItemAtURL:backupURL toURL:databaseURL error:&error];
if (!copied) {
NSLog(@"Error copying file: %@", error.localizedDescription);
return;
}
// INITIALIZE
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"Default Database"];
self.database = [[UIManagedDocument alloc] initWithFileURL:url];
}];
}
我有它工作,但是,我不確定它是否是一個安全和首選的解決方案(核心數據新手)。任何輸入?
感謝您的回覆。文件包不能通過iTunes文件共享傳輸到應用程序,所以我無法複製整個目錄。我目前只複製並替換persistentStore(將其重新放回到現有文件包(Default Database/StoreContent)中的適當位置,並且它似乎正常工作。 您認爲這樣做沒有問題嗎?如果沒有,我會需要複製整個文件包,爲什麼是這種情況? – Alexander 2012-08-03 20:18:31