NSUbiquitousKeyValueStore vs NSUserDefaults

时间:2017-04-25 20:41:43

标签: ios nsuserdefaults nsubiquitouskeyvaluestore

来自Apple's NSUbiquitousKeyValueStore documentation

  

如果在用户未登录iCloud帐户时写入键值存储对象,则数据将存储在本地,直到下一次同步机会为止。当用户登录iCloud帐户时,系统会自动将您的本地磁盘上的密钥和值与iCloud服务器上的密钥和值进行协调。

因此,如果用户从未登录iCloud帐户,则键值存储对象将无限期地存储在本地,与NSUserDefaults非常相似。

在这种情况下,我们是否应该停止使用NSUserDefaults并仅使用NSUbiquitousKeyValueStore作为所有应用的“默认”?这种方法的缺点是什么?

我可以看到的一个优势是,从用户的角度来看,应用偏好将在所有设备上同步,这很可能是更好的用户体验!

2 个答案:

答案 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设置中为应用程序翻转了该开关。