Я использую CloudKit
для хранения общедоступных данных, а новый NSPersistentCloudKitContainer
как часть моего стека базовых данных для хранения / синхронизации c личных данных.
Когда пользователь открывает В моем приложении они находятся в одном из 4 состояний:
- Они - новый пользователь с доступом к iCloud
- Они - возвращающийся пользователь с доступом к iCloud
- Они являются новым пользователем, но по какой-то причине не имеют доступа к iCloud
- Они являются возвращающимися пользователями, но по какой-то причине не имеют доступа к iCloud
Состояния 1 и 2 представляют мои счастливые пути. Если они новый пользователь, я хотел бы заполнить личный магазин пользователя некоторыми данными, прежде чем показывать начальный вид. Если они - возвращающийся пользователь, я бы хотел получить данные из Core Data для передачи в исходное представление.
Определение нового / старого пользователя: Я планирую использовать NSUbiquitousKeyValueStore
. Моя проблема связана с тем, что они: загружают приложение -> регистрируются как запустившие приложение до -> удаляют и переустанавливают / устанавливают приложение на новом устройстве Я предполагаю, что NSUbiquitousKeyValueStore
займет некоторое время для получения обновлений, поэтому мне нужно подождать, пока синхронизация не закончится, прежде чем перейти к исходному виду. Тогда возникает вопрос, что произойдет, если у них нет доступа к iCloud? Как NSUbiquitousKeyValueStore
может сказать мне, являются ли они возвращающимся пользователем, если он не может получать обновления?
Определение доступа к iCloud: На основании проведенного исследования я могу проверить если FileManager.default.ubiquityIdentityToken
равно nil
, чтобы увидеть, доступен ли iCloud, но это не скажет мне , почему . Я должен был бы использовать CKContainer.default().accountStatus
, чтобы узнать, почему iCloud не доступен. Проблема в том, что это асинхронный вызов, и мое приложение продолжило бы работу, прежде чем узнало, каков статус их учетной записи. Каков наилучший способ изящно убедиться, что все эти состояния обработаны?