当前设备的NSUbiquitousKeyValueStore通知

时间:2018-07-10 00:47:12

标签: icloud nsubiquitouskeyvaluestore

我正在使用NSUbiquitousKeyValueStore将用户首选项存储在iCloud中。为确保我了解NSUbiquitousKeyValueStore的工作原理,我成功存储了String值并在单独的设备上监视了该值。以下说明了我的配置。

我首先观察Notification在外部更改时发布的NSUbiquitousKeyValueStore

NSUbiquitousKeyValueStore.didChangeExternallyNotification

然后,我设置一个String输入的UITextField值:

let store = NSUbiquitousKeyValueStore.default
store.set(text, forKey: key)
store.synchronize()

为确保此功能有效,我在响应通知的方法中创建了UIAlertController。我观察到警报在设置主设备上的值后六秒钟内出现在辅助设备上。但是,设置该值后,我从未观察到该警报出现在主要设备上。

在读取NSUbiquitousKeyValueStore的{​​{3}}之后,我找不到更新NSUbiquitousKeyValueStore后主设备也不会收到通知的原因。

NSUbiquitousKeyValueStore中设置更新值之前,我是否需要一种解决方案来将更新值保存在本地?我可以先在UserDefaults中将值持久保存在NSUbiquitousKeyValueStore中。但是,如果在尝试将它们保留在UserDefaults中的过程中发生错误,将需要我还原NSUbiquitousKeyValueStore中的值。如果没有通知主设备持久化的更改,是否还会在观察通知时通知我错误?我很难相信如果成功时我没有收到通知,我会的。

我是否缺少某些东西,或者这是预期的行为?

1 个答案:

答案 0 :(得分:0)

也许他们是updated the documentation(自您提出要求以来+ 1年)。

  

“此通知仅在从iCloud收到更改后发送;当您的应用设置值时不发送。”

我认为这意味着因为未观察到任何更改(本地设备和iCloud已经同步)-您不会收到通知。