iOS 5不允许将下载的数据存储在Documents目录中?

Nav*_*ved 50 iphone objective-c in-app-purchase ios5

我已经通过将目标iOS保持为4来为我的客户端创建了一个应用程序.
但由于该应用程序仍未提交给Apple商店,我的客户端计划将其升级到iOS 5.0.

为此,我阅读了Apple指南,发现"只有用户生成的数据或者应用程序无法重新创建的数据应存储在/ Documents目录中,其余部分应存储在/ Library/Caches目录中"

在我的应用程序中,我正在使用针对非消费品的应用程序内购买的服务器模型.为此,我将所有下载的数据(基本上是书籍或杂志)存储到Documents目录中.数据库也存在于同一目录中,该目录包含有关下载产品的详细信息.

我的问题是,
1.我是否必须更改我的代码以将下载的数据存储到Library/Caches目录而不是Documents目录?
2.我的数据库文件应该放在哪里(到文档或缓存)?

如果我把它放在缓存中,那么我也必须改变检索的逻辑,因为如果记录存在于数据库中,则不需要改变文件的存在,并且当用户点击时它直接打开它该杂志.

请指导我这个问题.
提前致谢.

更新:
我正在为那些仍然不确定这个问题的人更新这个.
使用已接受答案的指导原则,我已在我的2个应用程序中实现了此功能并将其提交给Apple Store.两者都经过审查批准.
这可能会促使在接受的答案中建议的解决方案是正确的.

Ste*_*ton 58

以下是权衡:

  • 如果你把你的文件的文件目录,然后它们都备份到iTunes或iCloud的,但如果他们是太大,并有可能下载文件,然后再次苹果可能会拒绝你的应用程序
  • 如果您将文件放在缓存目录中,那么它们将不会被备份,Apple也不会拒绝您的应用程序.但是,当iOS 5空间不足时,它可能会删除其中的所有文件.

但是,对于iOS 5.0.1,还有第三种选择:

  • 将文件放入Documents但标记它们以便不备份它们.有一个技术说明(QA1719)如何做到这一点.

我想这可能是你的最佳答案.

  • 正如我在回答中所说:"如果你把文件放在Cache目录中,那么......当iOS 5空间不足时,它可能会删除那里的所有文件." Apple为这个问题提供的解决方案是我在第三个要点中提到的"无备份"标志. (6认同)
  • "将文件放入文档中,但标记它们以便不备份它们." (4认同)
  • 请阅读技术说明.如果您将文件放在缓存目录中,iOS将在空间不足时删除它们.如果您只是将它们放入文档Apple可能不会批准您的应用程序.如果您将它们放在Documents _and_ flag中作为"no backup",Apple将批准您的应用程序,并且在低空间情况下不会删除这些文件. (4认同)
  • 什么是iOS 5.0版本?Apple在文档中说"重要新的"不备份"属性只会被iOS 5.0.1或更高版本使用.在iOS 5.0及更早版本中,应用程序需要将其数据存储在<Application_Home>/Library/Caches中为了避免备份它.由于在旧系统上忽略此属性,您需要确保您的应用程序符合您的应用程序支持的所有iOS版本上的iOS数据存储指南." (3认同)
  • 只要用户可以删除我想象的文件就可以了. (2认同)

Him*_*dav 7

1.我是否必须更改我的代码以将下载的数据存储到Library/Caches目录而不是Documents目录?=是,您需要将下载的数据存储到Library/Caches目录.

2.我的数据库文件应该放在哪里(到文档或缓存)?=您可以将数据库保留在Documents目录中.


Mri*_*ria 6

我知道的一个应用程序因此被拒绝了.不建议在Documents dir中存储可下载数据.它背后的逻辑是你的数据不应该不必要地膨胀app目录.此应用程序目录在iCloud中备份,因此膨胀的应用程序目录将导致更多数据保存在iCloud中.

如果可以再次下载数据,如杂志,书籍pdf等.然后将其保存在Caches目录中.当然,您可以在Documents目录中存储指向数据的指针(如URL等),以便用户以后可以检索它们.

回答你的问题:

  1. 是的,更改您的代码以从缓存中的文档和数据加载DB.
  2. 将数据库保存在Documents中

你必须添加代码来检查数据库中的文档是否存在于缓存中,如果它不是你的应用程序应该再次下载它.

  • 您应该将数据库保留在Documents中,以便正确备份.如果用户从iCloud备份恢复,将删除Caches目录中的所有内容. (2认同)