1

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

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

4

3 回答 3

4

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。如果您有大量支持文件,您可以将它们存储在自定义子目录中,并将扩展属性仅应用于该目录。

于 2012-07-22T21:09:22.430 回答
2

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

我建议你看看核心数据。

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

很酷的报价:

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

希望有帮助。

于 2012-07-22T21:02:59.997 回答
0

这个问题的公认答案可能会有所帮助。

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

将文件放在 Documents 中,但将它们标记为不备份。有一个关于如何做到这一点的技术说明(QA1719)。

于 2012-07-22T21:11:37.787 回答