3

NSUbiquitousKeyValueStore用来在 iCloud 中存储用户首选项。为了确保我了解其NSUbiquitousKeyValueStore工作原理,我成功地存储了一个String值并在单独的设备上监控了该值。下面解释我的配置。

我首先观察外部更改Notification时发布的内容:NSUbiquitousKeyValueStore

NSUbiquitousKeyValueStore.didChangeExternallyNotification

然后,我设置了一个String作为 a 输入的值UITextField

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

为了确保这个工作,我在UIAlertController响应通知的方法中创建了一个。我观察到在主设备上设置值后的六秒内,警报出现在辅助设备上。但是,在设置值后,我从未观察到警报出现在主设备上。

阅读文档NSUbiquitousKeyValueStore,我找不到主设备在更新后也不会收到通知的原因NSUbiquitousKeyValueStore

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

有什么我遗漏的东西,还是这是预期的行为?

4

1 回答 1

2

也许他们更新了文档(自您问起 + 1 年)。

“此通知仅在收到来自 iCloud 的更改时发送;它不会在您的应用设置值时发送。”

我认为这意味着因为没有观察到任何变化(本地设备和 iCloud 已经同步) - 你没有收到通知。

于 2019-06-10T15:41:16.483 回答