将 Core Data 存储转换为 JSON 的程序。其目标是提供适用于使用 Core Data 的应用程序的可读备份功能,不依赖于 Core Data 的任何实现细节。
使用 CDJSONExporter CocoaPod 进行安装是推荐的方式。
否则,复制 CDJSONExporter
的代码(此存储库中所有的 .h
和 .m
文件)和 NSData+Base64 到您的项目中。
首先,导入:#import "CDJSONExporter.h"
。
创建导出数据
NSData *export = [CDJSONExporter exportContext:appDelegate.managedObjectContext
auxiliaryInfo:@{@"some key": someOptionalAuxiliaryInformation}];
此数据可以写入临时文件,并与 UIDocumentInteractionController
分享,或在邮件编辑视图控制器中作为附件使用
MFMailComposeViewController *mailer = ...;
// ...
[mailer addAttachmentData:export mimeType:@"application/json" fileName:@"backup.someAppBackup"];
要稍后打开数据,您需要将您的应用程序注册为处理端类型/UTI 与扩展 someAppBackup
的处理程序。之后,您可以在应用程序代理中处理具有此扩展的数据
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if([[url pathExtension] isEqualToString:@"someAppBackup"]) {
NSData *jsonData = [NSData dataWithContentsOfURL:url];
BOOL success = [CDJSONExporter importData:jsonData toContext:appDelegate.managedObjectContext clear:YES];
if([[NSFileManager defaultManager] isDeletableFileAtPath:[url path]])
[[NSFileManager defaultManager] removeItemAtURL:url error:NULL];
}
}
此代码的内存使用不是最佳。主要原因是 Core Data 无法永久保存无效对象。这通常是好事,但阻止了代码在导入时持久化更改。