在我的设备中切换测试iCloud帐户以测试我的应用程序是否正确处理iCloud帐户更改检测时,我遇到了一个问题。
因此,我在CloudKit和NSUbiquitousKeyValueStore中都存储了数据。
当我使用iOS设置注销iCloud帐户A时,应用程序会自动终止(我想这没问题)。然后,当我使用iCloud帐户B登录并重新启动应用程序时,我在调用fetchUserRecordID方法时获得了正确的iCloud帐户(B)。
问题是NSUbiquitousKeyValueStore没有立即更新,并且存储在SynchedPreferences下的NSUbiquitousKeyValueStore维护的.plist文件仍然具有以前的iCloud信息,即使我在检测到iCloud更改后显式调用了synchronize方法。
这里的问题是,当iCloud帐户更改时,我是否必须执行其他操作才能启动NSUbiquitousKeyValueStore同步?或者我只需要等待didChangeExternallyNotification通知的出现,这可能需要3-30分钟,或者(在其他一些情况下,我已经注意到)可能只需要应用程序重启才能生效?
发布于 2018-12-19 01:01:03
您可以尝试观察CKAccountChanged对象,看看这是否有帮助:
//AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//Listen for iCloud account status changes
NotificationCenter.default.addObserver(self, selector: #selector(checkCloudKitStatus), name: Notification.Name.CKAccountChanged, object: nil)
return true
}
@objc func checkCloudKitStatus(){
//Do whatever you need to in order to switch iCloud accounts
}在checkCloudKitStatus()方法中,您可以尝试优雅地处理更改,这样您的应用程序就不会崩溃。我怀疑崩溃可能是一个迹象,表明你的应用程序没有正确处理帐户更改。您还可以尝试刷新该方法中的NSUbiquitousKeyValueStore。
发布于 2020-10-14 23:09:46
我相信苹果已经建立了一个单独的通知系统,名为NSUbiquityIdentityDidChangeNotification,用于登录和注销iCloud,以及在iCloud驱动器(或iCloud驱动器)中打开/关闭应用程序的开关。
因此,基本上,如果你想检查你的应用程序/登录和注销事件的iCloud状态,你可以订阅NSUbiquityIdentityDidChangeNotification。如果你想知道你在其他设备上的应用程序在iCloud中的数据何时发生了变化,你可以订阅NSUbiquitousKeyValueStore.didChangeExternallyNotification。
大多数应用程序可能会想要同时订阅这两个应用程序,尽管除了调试我的iOS应用程序之外,在设备上切换iCloud帐户确实不是我必须做的事情!
https://stackoverflow.com/questions/53794054
复制相似问题