iOS核心数据:什么时候数据可以恢复?

dhr*_*hrm 2 cocoa-touch core-data objective-c ios

我的iOS应用程序已经过审核,但在iOS数据存储指南方面遭到拒绝.最后,它被拒绝了,因为我的Core Data数据库(sqlite)位于/ Documents文件夹中.我知道,只应使用此文件夹,我的应用程序无法重新创建数据.我选择把它放在那里的原因是,我的数据库中的一个实体包含一个属性,告诉我是否已经读取了给定的新闻.无法重新创建此信息.这还不足以将数据库放在/ Documents文件夹中吗?

另一件事是,我的应用程序的当前版本不使用此值来可视化是否已读取新闻项.那么,我应该告诉审核小组这个属性和论点为什么我认为它应该放在文档文件夹中 - 或者我应该把它移到/ Library/Cache /

Bre*_*don 5

应用审核小组希望您将数据拆分.将可重新创建的部分存储在Cache文件夹中,以及无法在Documents文件夹中重新创建的内容.如果在理论上可以重新创建文档中的一些东西也没关系 - 没有人会注意到标题或日期戳 - 但是长文本文档,视频,音频或图像应该保存在Cache文件夹中(如果它们可以)稍后再下载.

您可以通过几种不同的方式执行此操作:

  1. 将下载的内容存储在Cache文件夹中,并仅将内容的文件名放在Core Data数据库中(或者从其他内容计算文件名,例如从其下载的URL的SHA-1哈希值).确保您的代码将重新下载不在缓存中的任何内容.

  2. 将两个Core Data存储与单个存储协调器一起使用.请注意,您无法在两个商店中拆分实体的属性,因此您可能必须将某些实体分成两半.您也无法创建从一个商店中的对象到另一个商店中的对象的关系,因此您必须存储对象ID URI.有关详细信息,请参阅" 核心数据编程指南"的"关系和提取的属性"部分中的"跨存储关系" .

无论您做什么,请记住,iOS可能随时清除您的缓存文件夹.为Cache文件夹中的文件做好准备已经消失; 如果发生这种情况,您应该在用户请求时重新下载文件.