【问题标题】:NSUbiquitousKeyValueStore sync delay when changing iCloud accounts更改 iCloud 帐户时的 NSUbiquitousKeyValueStore 同步延迟
【发布时间】:2019-05-16 13:41:23
【问题描述】:

在我的设备中切换测试 iCloud 帐户以测试我的应用是否正确处理 iCloud 帐户更改检测时遇到了一个问题。

所以我在 CloudKit 和 NSUbiquitousKeyValueStore 上都存储了数据。

当我使用 iOS 设置注销 iCloud 帐户 A 时,应用程序会自动终止(我想这没关系)。然后,当我使用 iCloud 帐户 B 登录并重新启动应用程序时,在调用 fetchUserRecordID 方法时,我得到了正确的 iCloud 帐户 (B)。

问题是尽管NSUbiquitousKeyValueStore 没有立即更新,并且SynchedPreferences 下存储的.plist 文件(NSUbiquitousKeyValueStore 维护)仍然具有以前的 iCloud 信息,即使我明确调用synchronize 检测到 iCloud 变化后的方法。

这里的问题是,当 iCloud 帐户更改时,我是否必须执行其他操作才能让 NSUbiquitousKeyValueStore 同步启动?还是我只需要等待didChangeExternallyNotification 通知发生,这可能需要 3-30 分钟,或者(在我注意到的其他一些情况下)可能只需要重新启动应用程序才能启动?

【问题讨论】:

    标签: ios swift mobile icloud cloudkit


    【解决方案1】:

    您可以尝试观察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

    【讨论】:

    • 嘿克利夫顿!谢谢您的回答。不幸的是,我已经尝试收听该通知无济于事:虽然通知在 iCloud 帐户更改时发布,并且我明确调用 synchronize() 以刷新 NSUbiquitousKeyValueStore,但 KVS 不会与 CloudKit 帐户一起更新:(
    【解决方案2】:

    我相信 Apple 已经建立了一个名为 NSUbiquityIdentityDidChangeNotification 的单独通知系统,用于登录和退出 iCloud 以及打开/关闭应用在 iCloud Drive(或完全是 iCloud Drive)中的开关。

    所以基本上,如果你想检查你的应用程序的 iCloud 状态/登录和注销事件,你订阅NSUbiquityIdentityDidChangeNotification。如果您想知道其他设备上您的应用在 iCloud 中的数据何时发生变化,请订阅NSUbiquitousKeyValueStore.didChangeExternallyNotification

    大多数应用可能都希望同时订阅这两个服务,尽管在设备上切换 iCloud 帐户并不是我在调试 iOS 应用时必须要做的事情!

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 2012-03-03
      • 2012-07-08
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多