我正在使用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
中的值。如果没有通知主设备持久化的更改,是否还会在观察通知时通知我错误?我很难相信如果成功时我没有收到通知,我会的。
我是否缺少某些东西,或者这是预期的行为?
答案 0 :(得分:0)
也许他们是updated the documentation(自您提出要求以来+ 1年)。
“此通知仅在从iCloud收到更改后发送;当您的应用设置值时不发送。”
我认为这意味着因为未观察到任何更改(本地设备和iCloud已经同步)-您不会收到通知。