【问题标题】:Best place to store application content存储应用程序内容的最佳位置
【发布时间】:2014-11-20 03:19:52
【问题描述】:

我有一个应用程序,它处理大量数据(基本上是图像),从我们的服务器下载,应该可以在没有互联网连接的情况下使用。

我以前将它们存储在<Application_Home>/Library/Caches 目录中,但是在iOS 更新过程之后它们都被删除了。这种行为对我来说是不可接受的,现在我正在寻找更好的地方来存储数据并确保它们不会被系统删除。

存储此类数据的最佳位置是什么?

【问题讨论】:

  • Documents 文件夹呢?您没有在其中存储任何东西有什么特别的原因吗?
  • 是的,苹果说:“使用这个目录来存储关键的用户文档和应用程序数据文件。关键数据是你的应用程序无法重新创建的任何数据,例如用户生成的内容。”跨度>
  • 您刚才引用了这里的观点:“关键数据是您的应用无法重新创建的任何数据”,您帖子的第一句话是关于“(.. .) 大量数据(基本上是图像),从我们的服务器下载 (...)",所以问题是,您的应用可以重新创建这些图像吗?。如果您的答案是no,那么您没有理由不能使用Documents 文件夹...如果您的答案是yes,您不需要将这些图像存储在任何地方,因为您的应用可以在运行时重新创建这些图像...
  • 答案是“是的,可以重新创建图像”,但主要目标之一是让这些数据在没有互联网连接的情况下可用,因为用户希望能够访问它而不是下载 300+ Mb每次或突然错过。
  • 如果图像可以由应用在运行时重新创建而无需任何外部资源,则不需要存储它们,因为根据您的回答(即) 应用程序可以随时重新创建它们。我只是想知道您是否正确理解了 Apple 的声明...无意冒犯,但您似乎可能误解了它——因为如果图像来自外部来源(即 您的服务器),则应用程序是无法(即无法)重新创建它们,因此您可以使用Documents 文件夹来存储它们。

标签: ios cocoa-touch nsdocumentdirectory


【解决方案1】:

caches 目录顾名思义就是缓存。可以清空缓存,您确实应该重新下载图像。文档目录是存储这些图像的更好位置,但您应该在文件上使用skip iCould backup key 进行存储。

只是一个小提示,请始终使用URLForDirectory:inDomain:appropriateForURL:create:error:NSSearchPathForDirectoriesInDomains

【讨论】:

  • 但苹果说只有用户数据或无法重新创建的数据才应该存储在 Documents 目录中。我很确定,如果我尝试在那里存储数据,该应用程序将被拒绝。嗯... /Library/Application Support 目录呢?
  • 我在那里保存了许多可重现的数据,但只要添加NSURLIsExcludedFromBackupKey 就可以了。
  • 谢谢!我会试试的。
【解决方案2】:

只有文档目录中的数据不会被 iOS 删除:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

文档中的数据与 iCloud 同步。如果您有很多,则需要禁用此选项:

[urlOfImage setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2014-01-05
    • 2020-08-22
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多