objective-c - iOS核心数据: When is data recreatable?

标签 objective-c ios cocoa-touch core-data

我的 iOS 申请已接受审核,但因 iOS Data Storage Guidelines 被拒绝。最后被拒绝了,因为我的Core Data数据库(sqlite)位于/Documents文件夹中。我知道,只有当我的应用程序无法重新创建数据时,才应使用此文件夹。无论如何,我选择将其放在那里的原因是,我的数据库中的实体之一包含一个属性,告诉给定的新闻是否已被阅读。该信息无法重新创建。将数据库放在 /Documents 文件夹中还不够吗?

另一件事是,我的应用程序的当前版本不使用此值来可视化新闻项是否已被阅读。那么,我应该告诉审核团队这个属性和参数,为什么我认为它应该放在文档文件夹中——或者我应该将它移动到/Library/Cache/

最佳答案

应用审核团队希望您拆分数据。将可重新创建的部分存储在 Cache 文件夹中,将无法重新创建的内容存储在 Documents 文件夹中。如果文档中有一些理论上可以重新创建的内容也没关系(没有人会注意到标题或日期戳),但如果可以的话,长文本文档、视频、音频或图像应保留在缓存文件夹中。稍后再次下载。

有几种不同的方法可以做到这一点:

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

  2. 使用两个核心数据存储和一个存储协调器。请注意,您无法将实体的属性拆分到两个商店,因此您可能必须将某些实体分成两半。您也无法创建从一个存储中的对象到另一个存储中的对象的关系,因此您必须存储对象 ID URI。请参阅 "Relationships and Fetched Properties" section 中的“跨商店关系”阅读《核心数据编程指南》了解更多详细信息。

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

关于objective-c - iOS核心数据: When is data recreatable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951820/

相关文章:

iOS:存储在 session 中过期的 cookie

c++ - 使用opencv进行图像边缘平滑

ios - 全屏显示 UIImageView (320*480)

ios - 将 mask 应用于 UIView 以模拟玻璃微光

ios - 更改框架不会调整 UIImageView 的大小

iphone - Objective-C 的单元测试和代码覆盖框架?

objective-c - 为什么在 Objective-C 中一个人会自动释放自己的属性(property)?

iphone - 我的应用程序仅在美国商店有售,为什么?

javascript - iOS Safari 无法通过 AJAX 发送表单数据

ios - UIScrollView - 滚动或滑动?