ios13 - CKAccountChanged 通知只收到一次
问题描述
我想在 iCloud 帐户状态更改时在我的 iOS 应用程序中收到通知,因此我通过以下方式注册
NotificationCenter.default.addObserver(self, selector: #selector(iCloudAvailabilityChanged), name: Notification.Name.CKAccountChanged, object: nil)
事实上,当我在后台运行我的应用程序,并在设置中翻转应用程序的 iCloud 开关,然后返回并前台运行我的应用程序时,我会在 applicationWillEnterForeground 之后立即收到通知。
但是,如果我重复此操作,则再次将我的应用程序置于后台,翻转开关,然后再次将我的应用程序置于前台,则不会收到通知。如果我第三次、第四次等,也不会这样做。
这种行为有时不会发生在我身上,但总是会发生,而且我在不同的设备上尝试过,都是一样的。
我使用 iOS 13 和 Swift 5。
这是预期的行为,还是错误,还是我做错了什么?感谢您的任何帮助!
解决方案
正如我上面的评论所暗示的那样,我认为您可能拨错了开关。据我了解,CKAccountChanged
当您更改以下两项之一时会触发:
- 在设备上登录/退出iCloud。
- 打开/关闭 iCloud Drive(在 中
Settings > iCloud Profile > iCloud > iCloud Drive
)
我还没有在任何地方看到更改特定应用程序的 iCloud 可用性会触发CKAccountChanged
。
推荐阅读
- docker - 如何读取 docker 容器内的环境变量?
- sql - 仅对特定值进行分组并获取最小和最大日期
- sql - 如何通过 VB.net 从 Visual Studio 将多个 ComboBox 值输入到 Access 数据库
- objective-c - 如何检查 NSDictionary 是否为空并读取目标 c 中的 JSON 值
- python - 来自迭代器的 numpy ndarrays 的运行平均值
- javascript - Ionic 和 ssh2:错误:不支持 process.binding
- postgresql - 如何查询名称同时包含大小写的表?
- qt - 如何在 QML 文件中直接监听 QGuiApplication::applicationStateChanged 信号
- javascript - 将函数推送到数组,将 let 转换为 var
- javascript - document.getElementsByClassName 不起作用