NSUbiquitousKeyValueStore задержка синхронизации при смене учетных записей iCloud - PullRequest
0 голосов
/ 15 декабря 2018

Возникла проблема, с которой я столкнулся при переключении тестовых учетных записей iCloud на моем устройстве, чтобы проверить, правильно ли мое приложение обрабатывает обнаружение изменений учетной записи iCloud.

Поэтому у меня есть данные, хранящиеся как в CloudKit, так и в NSUbiquitousKeyValueStore.

Когда я выхожу из учетной записи iCloud A с настройками iOS, приложение автоматически убивается (что, я думаю, нормально).Затем, когда я вхожу в учетную запись iCloud B и перезапускаю приложение, я получаю правильную учетную запись iCloud (B) при вызове метода fetchUserRecordID.

Проблема заключается в том, что NSUbiquitousKeyValueStore необновиться сразу, и сохраненный файл .plist в SynchedPreferences, который поддерживает NSUbiquitousKeyValueStore, по-прежнему содержит предыдущую информацию iCloud, хотя я явно вызываю метод synchronize после обнаружения изменения iCloud.

Вопрос здесь заключается в том, нужно ли делать что-то еще, чтобы синхронизация NSUbiquitousKeyValueStore активировалась при изменении учетной записи iCloud?Или мне просто нужно дождаться появления уведомления didChangeExternallyNotification, что может занять от 3 до 30 минут, или (в некоторых других случаях, как я заметил) может потребоваться перезапуск приложения?

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете попробовать наблюдать за объектом 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 внутри этого метода.

...