9

来自Apple 的 NSUbiquitousKeyValueStore 文档

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

因此,如果用户从未登录 iCloud 帐户,则键值存储对象将无限期地存储在本地,就像 NSUserDefaults 一样。

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

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

4

2 回答 2

3

我们应该清楚地了解,NSUbiquitousKeyValueStoreiCloud 是用于在某个帐户的所有设备上配置和跟踪应用程序状态。

一些事实回合NSUbiquitousKeyValueStore

在文档中我们可以发现:

避免将此类用于离线时对您的应用行为至关重要的数据;相反,将此类数据直接存储到本地用户默认数据库中。

可以保存的数据大小也相对较小。

对于给定用户,您应用的键值存储中的可用空间总量为 1 MB。每个键的值大小限制为 1 MB,最多 1024 个键。

于 2017-04-25T20:47:55.203 回答
2

我发现如果用户进入他们的 iCloud 设置并关闭你的应用程序 - 你将无法再保存到 NSUbiquitousKeyValueStore。

您的应用程序将从启用它开始。然后你可以在那里保存数据。关闭 iCloud 后,它始终可以读取 - 但如果您更新数据并重新启动应用程序,我相信您会看到它恢复到用户在 iCloud 设置中关闭 iCloud 支持之前的状态。

这是我目前正在处理的一个问题。我正在尝试找到一种方法来测试该开关是否打开/关闭并将我的数据存储更改为 NSUserDefaults。

如果我错了,请纠正我,但这就是我到目前为止所发现的。

-标记

编辑:这仅适用于您已注册 iCloud Documents 的情况。如果您只使用 NSUbiquitousKeyValueStore 它应该几乎相同 - 我相信。

编辑编辑:现在它的表现不同了。只有在 iCloud 功能中选中 NSUbiquitousKeyValueStore 时,该开关才会出现。因此,再次寻找一种方法来检测是否为 iCloud 设置中的应用程序翻转了该开关。

于 2018-05-09T00:55:17.897 回答