gpt4 book ai didi

ios - 用 NSFileManager 替换 CoreData persistantStore 是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:50 24 4
gpt4 key购买 nike

我有一个与我的应用程序完美配合的 CoreData 数据库。数据库存储由用户保存的预设。我想让用户能够通过 iTunes 使用文件共享来备份数据库。

基本上我想:

  1. 备份:数据库 -> 用户可以在设备之间传输的文件

  2. 恢复:文件 -> 数据库

我想到的最直接的方法就是简单的复制替换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];
}];

我有它的工作,但是,我不确定它是否是一个安全和首选的解决方案(对核心数据来说是新的)。有什么意见吗?

最佳答案

如果您的用法足够简单,一般情况下应该没问题。

如果您对大型二进制数据使用外部链接,则还需要复制这些文件。

如果您使用文件包(或 UIManagedDocument),您将需要整个文件包,而不仅仅是 sql 存储。

如果您使用的是 iCloud,您还有其他一些事情需要担心...

关于ios - 用 NSFileManager 替换 CoreData persistantStore 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com