备份&接收核心数据SQlite3数据库

时间:2014-10-02 16:12:06

标签: ios objective-c core-data sqlite

我想在核心数据中备份和检索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

总而言之,我如何保存和恢复我的核心数据

1 个答案:

答案 0 :(得分:0)

将所有3个sqlite文件归档到一个zip文件中,并将其命名为Backup.myappbackup或类似的东西(最好将备份日期添加到文件名)。您可以注册扩展程序以便您的应用程序识别,这将允许Mail.app识别此扩展程序并在您的应用程序中打开此备份。接下来,您将取消归档核心数据文件,在您的位置替换它们并重新配置核心数据堆栈。您还可以允许用户通过iTunes Sharing放置备份,并从Documents文件夹中恢复它。