我正在使用NSUbiquitousKeyValueStore在iCloud中存储用户首选项。为了确保我理解NSUbiquitousKeyValueStore是如何工作的,我成功地存储了一个String值,并在一个单独的设备上监视了该值。下面解释我的配置。
我首先观察了当NSUbiquitousKeyValueStore在外部发生变化时发布的Notification:
NSUbiquitousKeyValueStore.didChangeExternallyNotification然后,我设置了一个作为UITextField输入的String值
let store = NSUbiquitousKeyValueStore.default
store.set(text, forKey: key)
store.synchronize()为了确保正常工作,我在响应通知的方法中创建了一个UIAlertController。我观察到,在设置主设备上的值后六秒钟内,辅助设备上就会出现警报。但是,在设置该值后,我从未观察到警报出现在主设备上。
在阅读NSUbiquitousKeyValueStore的documentation后,我找不到主设备在更新NSUbiquitousKeyValueStore后也无法收到通知的原因。
在NSUbiquitousKeyValueStore中设置更新值之前,我是否需要一种解决方案将其保存在本地?在NSUbiquitousKeyValueStore中持久化这些值之前,我可以在UserDefaults中本地持久化它们。但是,如果在尝试在NSUbiquitousKeyValueStore中持久化这些值时出现错误,则需要恢复UserDefaults中的值。如果没有通知主设备从它保留的更改,我甚至会被通知在观察通知中的错误吗?如果我在成功时没有收到通知,我很难相信我会这样做。
我是否遗漏了什么,或者这是预期的行为?
发布于 2019-06-10 23:41:16
也许他们updated the documentation (从你问起+1年)。
“此通知仅在收到来自iCloud的更改时发送;不会在您的应用程序设置值时发送。”
我假设这意味着因为没有观察到任何更改(本地设备和iCloud已经同步),所以您不会收到通知。
https://stackoverflow.com/questions/51255807
复制相似问题