Проблемы с резервным копированием данных в iCloud - PullRequest
0 голосов
/ 22 октября 2019

Здравствуйте, я занимаюсь разработкой приложения с хранилищем icloud (по умолчанию) и совместимым с локальным хранилищем. Пользователь может выбрать, какой из них использовать. В настоящее время это работает хорошо. Я могу хранить свои основные данные и значение ключа в моем контейнере cloudKit. Теперь поговорим об основных данных, а также о том, как и сохранить информацию. С основными данными я сохраняю все данные приложения, объекты и информацию. На этой сущности есть «Пользователь» с 3 атрибутами firstName, lastName, photo. Когда выполняется метод didFinishLaunchingWithOptions, он проверяет, существует ли объект cloud, сохраненный в cloudKit, если true, обычно вводят в приложение, если false, показывают регистр vc, который запрашивает у вас информацию (имя, имя, фото).

Итак, теперь давайте поговорим о проблеме. Я могу удалить приложение со своего устройства и переустановить, чтобы получить обратно все мои данные, НО, когда я открываю приложение, проверка пользователя выполняется до того, как данные полностью загружены, поэтому он возвращает false и всегда как регистр vc. Что если пользователь переустановит приложение, а затем откроет его, когда нет доступа в интернет? Он всегда будет возвращать false, потому что данные еще не скопированы ... Если я подожду несколько секунд, пока не закончится запрос на выборку, и заставлю выйти из приложения, чтобы снова открыться, данные будут загружены, поэтому они открываются нормально

Так как жея хочу иметь что-то естественное, как другие приложения, о которых вам не нужно беспокоиться при переустановке?

Я могу получить имя и имя пользователя icloud из учетной записи icloud, запросив разрешение, но не фотографию. Я думаю, что лучший вариант - сохранить сущность «Пользователь» для локальных пользователей и пользователей icloud, чтобы сохранить одинаковую систему для обоих. Также не может быть сохранено более одного объекта «Пользователь».

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if CoreDataHelper().getUserObject() != nil {
        let otherController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "tabBarController") as? tabBarController
        self.window?.rootViewController = otherController
    } else {
        let pageController = UIStoryboard(name: "quickStart", bundle: nil).instantiateViewController(withIdentifier: "pageVC") as! firstUsePageVC
        self.window?.rootViewController = pageController
    }

    return true
}
...