我想在核心数据中备份和检索sqlite3数据库。这是为了快速保存和恢复应用程序中保存的用户数据。计划是通过电子邮件发送数据库,然后在接收设备上打开它,所有以前的数据都会神奇地出现,一切都很好。
我已经阅读了很多关于这个主题的帖子和文档,但是把它们放在一起是我可以做些什么建议的地方。
到目前为止我做了什么:
我已设法使用以下
通过电子邮件发送sqlite3
数据库
NSString *filePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"db.sqlite"];
NSError *error = nil;
NSData *fileData = [[NSData alloc] initWithContentsOfFile:filePath options:0UL error:&error];
if (error != nil) {
DebugLog(@"Failed to read the file: %@", [error localizedDescription]);
} else {
if (fileData == nil) {
DebugLog(@"File data is nil");
}
}
MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc] init];
if (mailView != nil) {
mailView.mailComposeDelegate = self;
[mailView setSubject:@"back up database"];
[mailView addAttachmentData:fileData
mimeType:@"application/octet-stream"
fileName:@"db.sqlite3"];
[mailView setMessageBody:@"Database attached"
isHTML:NO];
[self presentViewController:mailView animated:YES completion: NULL];
}
进一步的研究让我相信我必须将其他日志文件附加到此? iOS: How can I create a backup copy of my core data base? And how to export/import that copy?
我已将这些文档记录为db.sqlite db.sqlite-shm db.sqlite-wal
我的问题是
1.我是否将所有这些db.sqlite db.sqlite-shm db.sqlite-wal
作为附件发送到电子邮件中?
2.接收这些文件并将其复制到应用程序的步骤是什么
简单地打开附件不起作用,因为它只能被某些应用程序读取。然后我在我的info.plist中创建了一个文档类型,我的应用程序作为应用程序显示在操作表中以接收文档,但崩溃了应用程序时出现错误incomprehensible archive
总而言之,我如何保存和恢复我的核心数据
答案 0 :(得分:0)
将所有3个sqlite文件归档到一个zip文件中,并将其命名为Backup.myappbackup或类似的东西(最好将备份日期添加到文件名)。您可以注册扩展程序以便您的应用程序识别,这将允许Mail.app识别此扩展程序并在您的应用程序中打开此备份。接下来,您将取消归档核心数据文件,在您的位置替换它们并重新配置核心数据堆栈。您还可以允许用户通过iTunes Sharing放置备份,并从Documents文件夹中恢复它。