【问题标题】:Better location for storing lots of image data than NSUserDefaults存储大量图像数据的位置比 NSUserDefaults 更好
【发布时间】:2012-07-21 04:21:52
【问题描述】:

我使用NSUserDefaults通过编码存储图像数据。我知道它可以保存在 Documents 目录中,但是如果内容太大,由于 iCloud 同步问题,这将导致 App Store 拒绝。它也可以保存在缓存目录中,但我保存的图像非常重要,我不想在缓存清除时丢失它们。

我担心我的应用会因为大量使用NSUserDefaults 进行数据存储而被拒绝——有没有其他方法可以在离线环境中处理这个问题?

【问题讨论】:

  • 只需将它们保存在库中,或禁用 iCloud 同步。
  • 保存在Library 中不再阻止备份。从 5.1 开始,您必须明确告诉操作系统不要备份,除非它位于 Cachestmp

标签: ios nsuserdefaults


【解决方案1】:

我不能说拒绝,但 NSUserDefaults 几乎肯定是错误的。 (用于用户偏好数据。)

我建议您研究一下核心数据。

这是最近的一个论点:http://sealedabstract.com/code/you-should-use-core-data/

来自它的酷引用:

如果您在没有链接到 CoreData.framework 的情况下将 3 个以上的对象保存到磁盘,那么您做错了。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    NSUserDefaults 不适合存储图像。您应该将这些存储在~/Library/Application Support 下。既然您说您不希望它们被备份,您应该按照iOS App Programming Guide 的说明进行操作:

    在 iOS 5.1 及更高版本中,将支持文件存储在 /Library/Application Support 目录中,并使用 setResourceValue:forKey:error: 方法将 NSURLIsExcludedFromBackupKey 属性添加到相应的 NSURL 对象。 (如果您使用 Core Foundation,请使用 CFURLSetResourcePropertyForKey 函数将 kCFURLIsExcludedFromBackupKey 键添加到您的 CFURLRef 对象。)应用此属性可防止将文件备份到 iTunes 或 iCloud。如果您有大量的支持文件,您可以将它们存储在自定义子目录中,并将扩展属性应用于该目录。

    【讨论】:

      【解决方案3】:

      this question 接受的答案可能会有所帮助。

      针对您的问题给出的要点:

      将文件放在 Documents 中,但对其进行标记以便不备份。有一个关于如何执行此操作的技术说明 (QA1719)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        相关资源
        最近更新 更多