来自Apple's NSUbiquitousKeyValueStore documentation:
如果在用户未登录iCloud帐户时写入键值存储对象,则数据将存储在本地,直到下一次同步机会为止。当用户登录iCloud帐户时,系统会自动将您的本地磁盘上的密钥和值与iCloud服务器上的密钥和值进行协调。
因此,如果用户从未登录iCloud帐户,则键值存储对象将无限期地存储在本地,与NSUserDefaults非常相似。
在这种情况下,我们是否应该停止使用NSUserDefaults并仅使用NSUbiquitousKeyValueStore作为所有应用的“默认”?这种方法的缺点是什么?
我可以看到的一个优势是,从用户的角度来看,应用偏好将在所有设备上同步,这很可能是更好的用户体验!
答案 0 :(得分:1)
我们应该清楚地了解iCloud中的NSUbiquitousKeyValueStore
用于在特定帐户的所有设备上配置和跟踪应用状态。
关于NSUbiquitousKeyValueStore
的一些事实。
在文档中我们可以找到:
避免将此类用于对应用程序至关重要的数据 离线时的行为;相反,将这些数据直接存储到 本地用户默认数据库。
此外,可以保存的数据大小相对较小。
应用的键值存储中可用的总空间量 给定用户,是1 MB。每个键的值大小限制为1 MB, 最多1024个密钥。
答案 1 :(得分:0)
我发现如果用户进入他们的iCloud设置并关闭你的应用程序开关 - 你将无法再保存到NSUbiquitousKeyValueStore。
您的应用将从启用它开始。然后你可以在那里保存数据。一旦iCloud关闭,它将始终可以读取 - 但如果您更新数据并重新启动应用程序,我相信您会看到它恢复到用户在iCloud设置中关闭iCloud支持之前的状态。
这是我目前正在处理的一个问题。我试图找到一种方法来测试该开关是否打开/关闭并将我的数据存储更改为NSUserDefaults。
如果我错了,请纠正我,但这是我到目前为止所发现的。
-mark
编辑:仅当您注册了iCloud Documents时才会这样。如果你只使用NSUbiquitousKeyValueStore它应该几乎相同 - 我相信。
编辑 - 编辑:现在它的表现不同了。当在iCloud功能中仅检查NSUbiquitousKeyValueStore时,交换机就在那里。所以再看一遍 - 检测是否在iCloud设置中为应用程序翻转了该开关。