HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 备份.sqlite(核心数据)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基于核心数据的应用程序,它使用DropBox备份和恢复数据.我备份的方式非常简单.我复制用户的保管箱上的.sqlite文件.

现在我的备份和恢复功能正常.问题出在.sqlite文件本身.看来.sqlite文件不完整.

我在我的应用程序中输入了大约125个条目并进行了备份.备份出现在我的DropBox中但是当我使用.sqlite资源管理器工具查看内容时,我只看到第117个记录的记录.

我尝试更新第一个条目,然后再次观察.sqlite文件,但没有再次更改.

更奇怪的是该应用程序似乎记录了所有更改.当我添加新条目或更新现有条目并重新启动应用程序时,新添加的数据似乎仍然存在.
但是这个新添加的数据不会出现在我的.sqlite文件中.

我正在使用此代码备份:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSString *filePath = [[[appDelegate applicationDocumentsDirectory] path] StringByAppendingPathComponent:@"MyApp.sqlite"];


if (account) {
    if ([filesystem isShutDown]) {
        filesystem = [[DBFilesystem alloc] initWithAccount:account];
        [DBFilesystem setSharedFilesystem:filesystem];
    }

    DBPath *newPath = [[DBPath root] childPath:[NSString StringWithFormat:@"BACkup - %@.sqlite",[NSDate date]]];
    DBFile *file = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil];
    [file writeContentsOfFile:filePath shouldSteal:NO error:nil];
    [filesystem shutDown];

}

我还从Simulator的文件夹中复制了.sqlite文件,并尝试在.sqlite浏览器中查看它.它仍然表现出相同的行为.有必要发生这种情况的原因吗?

解决方法

从iOS 7 / OS X 10.9开始,Core Data使用“预写日志记录”(WAL)作为认值
基础sqlite存储文件的日记模式.这在解释中

Technical Q&A QA1809: New default journaling mode for Core Data SQLite stores in iOS 7 and OS X Mavericks

这应该可以解释为什么单独的.sqlite文件不完整.
作为解决方案,您可以(也在技术说明中解释):

>通过设置,为sqlite存储禁用WAL模式(并使用“旧”回滚日记模式)

@{NSsqlitePragmasOption:@{@"journal_mode":@"deletE"}};

添加持久性存储时的选项,或
>使用

- (NSPersistentStore *)migratePersistentStore:(NSPersistentStore *)store toURL:(NSURL *)URL options:(NSDictionary *)options withType:(NSString *)storeType error:(NSError **)error

制作Core Data存储的备份副本的方法.

大佬总结

以上是大佬教程为你收集整理的ios – 备份.sqlite(核心数据)全部内容,希望文章能够帮你解决ios – 备份.sqlite(核心数据)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。