我有一个应用程序,允许我下载字符(图像),声音等。当用户选择下载哪个字符时,我可以将其存储在我的应用程序包中的目录中?如果没有,哪里是存储我的内容(数据)的最佳位置?我在想文件目录,但后来我看到Apple现在想要将数据存储在缓存目录中。
感谢您的帮助。
答案 0 :(得分:5)
我可以将它存储在App Bundle的目录中吗?
不,您无法修改应用包。
如果没有,哪里是存储我的内容(数据)的最佳位置?
如果您的应用必须支持iOS 5.0或更早版本,则需要将应用数据存储在Caches
目录中。但是,请记住,在低空间情况下可以删除文件,因此如果您的应用数据被删除,您的应用将需要优雅地降级。
从iOS 5.0.1开始,您可以将数据文件存储在文档目录和flag them as "do not back up"中。通过标记文件,您的应用程序符合应用程序负责确保仅将用户数据而非应用程序数据备份到iCloud和iTunes 的准则,并避免Apple可能拒绝。在这种情况下,在低空间情况下不会删除文件。
从iOS 5.1开始,您可以将数据文件存储在文档目录中,并使用NSURLIsExcludedFromBackupKey
或kCFURLIsExcludedFromBackupKey
文件属性从备份中排除文件。这些API中的任何一个都优于将其标记为“不备份”。在这种情况下,您的应用程序符合App Store指南,并且在低空间情况下不会删除这些文件。
答案 1 :(得分:3)
为确保备份尽可能高效,请务必按照以下准则存储应用的数据:
只有用户生成的文档和其他数据,或者应用程序无法重新创建的文档和其他数据应存储在/ Documents目录中,并由iCloud自动备份。
可以重新下载或重新生成的数据应存储在/ Library / Caches目录中。您应该放在Caches目录中的文件示例包括数据库缓存文件和可下载内容,例如杂志,报纸和地图应用程序使用的文件。
仅临时使用的数据应存储在/ tmp目录中。虽然这些文件没有备份到iCloud,但请记住在完成这些文件后删除这些文件,这样他们就不会继续占用用户设备上的空间。
如果您有OS X或Unix背景,那么很容易理解Apple的立场,即这些目录无法保证其中的数据将持续多长时间。
应用程序沙箱中的 tmp 目录与根 / tmp 目录不同,这对你如何看待这个目录应该没有什么区别
如果您以前从未观察过从这些目录中删除过文件,那么这并不能保证将来不会更改。特别是当更改符合文档时。这是一般规则。
Apple文档中的更改/差距:
2011年6月29日,Apple关于/ Documents的文档说:
使用此目录存储用户文档和应用程序数据文件。
这很清楚。难怪开发人员不满意在没有任何合适的替代方案的情况下,iOS 5中的Documents目录规则发生了变化。
关于/ Library / Caches:
使用此目录编写要在应用程序启动之间或应用程序更新期间保留的任何特定于应用程序的支持文件。您的应用程序通常负责添加和删除这些文件。它还应该能够根据需要重新创建这些文件,因为iTunes会在完全恢复设备时将其删除。
应用评论拒绝
开发人员报告说,App Review会拒绝在Documents目录中存储任何/部分/多数据的应用程序。
App Review团队不太可能详细了解哪些文件存储在哪个目录中,哪些文件是用户生成的,而不是可以重新下载或重新生成的数据。一些开发人员已经报告成功回应了App Review团队,并解释了他们的应用程序如何存储数据以及这是如何符合规则的。
iTunes和iCloud支持的内容
备份应用主目录中的所有内容,但以下情况除外:
其他文档明确指出应用程序支持目录也由iTunes备份(可能是iCloud)。在讨论中,一些开发人员建议Application Application目录比Caches更安全(=更永久)。对我而言,App Review似乎会以与文档目录相同的热情打击存储在应用程序支持中的大量数据,因为它完全与iCloud存储有关。
iOS 5中的行为更改
从iOS 5开始,如果设备遇到磁盘空间不足警告,则可能会在应用未运行时清除/ Library / Caches。
您的应用程序不再存储以下文件的目录:
答案 2 :(得分:1)
根据Apple的指南:
,下载的内容不应存储在Documents目录中Only documents and other data that is user-generated, or that cannot otherwise be recreated by your application, should be stored in the <Application_Home>/Documents
使用/ Library / Caches目录
Data that is used only temporarily should be stored in the <Application_Home>/tmp directory.