【问题标题】:Preventing NSUserDefaults from iCloud Backup从 iCloud 备份中防止 NSUserDefaults
【发布时间】:2015-01-14 21:54:30
【问题描述】:

据我所知,在 iOS 中可以通过三种方式持久写入设备:

  1. NSUserDefaults
  2. 自定义对象 - 存档并写入 NSDocuments 中的 PATH
  3. SQLite

Apple 提供了一种机制来防止带有 #2 的 iCloud 备份,即

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL

我使用 NSUserDefaults 来存储三个图像,但要遵守 iOS 数据存储指南 - 如何使用 NSUserDefaults 防止 iCloud 备份?

这个问题已经在 SO 上被问过好几次了,但还没有明确的全面答案。

是否有这样的功能,或者我必须使用方法#2 更改存储图像。我希望有一些方便的东西,比如:

- (BOOL)addSkipBackAttributeForStandardUserDefaultsKey:(NSString *)

存在。

【问题讨论】:

  • 你的方法似乎有点奇怪。为什么不能将图像存储到文档目录?为什么你需要在 NSUserdefaults 中这样做?
  • 我当然可以修改我的代码以遵守 #2 中的机制,但我希望有一种更简单的方法,类似于 #2 如何防止 iCloud 备份。苹果存储数据的机制不能遵守它自己的指导方针,这似乎很奇怪。我只是假设有一些我还不明白的东西,或者我在学习 iOS 的地方错过了一些信息。也许用 NSUserDefaults 存储图像是个坏主意,但我不明白为什么。
  • NSUserdefaults 可用于存储少量数据,控制应用行为或存储应用配置密钥等。您可以将图像添加到文档目录并使用 addSkipBackupAttributeToItemAtURL 跳过 iCloud 备份.没有像 addSkipBackAttributeForStandardUserDefaultsKey 这样的机制来防止 NSUserDefaults 数据。它将自动备份,因为它包含用户特定的数据,如用户设置和用户配置。
  • Midhun MP:NSUserDefaults 非常适合存储图像和其他任意数据。我已经成功使用了几年,没有任何问题。我很少需要保存到 NSDocumentDirectory 或其他任何地方。

标签: ios nsuserdefaults icloud


【解决方案1】:

没有这种机制。 NSUserDefaults 不用于保存应用数据。它用于保存应用程序所需的用户偏好和其他设置,但并非旨在作为完整的数据持久性系统。

说这个“......[Apple's] 存储数据的机制不能遵守它自己的准则”是不准确的”,因为这不是这个 API 的目的。特别是在这种情况下,如果不应该备份这些图像,那么这绝对证明用户默认是错误的存储位置。

您应该将图像保存到文件中。如果你有UIImage,这很简单。 UIImage 符合 NSCoding,因此很容易转换为 NSDataNSData 包括将对象读/写到文件的便捷方法。如果文件名可能更改,您可以合理地将文件名放在用户默认值中。如果文件名是事先知道的且无法更改,则没有理由存储它们。

【讨论】:

  • “您应该将图像保存到文件中” - 仅仅因为图像经常一张一张地保存到文件中并不能真正成为应用程序必须始终将图像保存到文件的原因。图像数据或声音数据或任何其他类型的数据只是数据,应用程序唯一关心的是它是持久的并且可以再次访问。 NSUserDefaults 适用于任何类型的数据,这就是它特别支持 NSData 的原因。如果说数据不应该备份,NSUserDefaults 显然是不支持的,但是和数据的类型,图像,声音什么的没有关系。
  • 我是专门为回答一个关于防止数据备份到 iCloud 的问题而写的,而不是写一篇关于如何保存数据的一般论文。在这种情况下,应该将数据写入文件,因为这就是防止将数据备份到 iCloud 的方式
猜你喜欢
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2012-01-23
  • 2011-12-26
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多