#ios #core-data #swiftui #cloudkit
#iOS #core-данные #swiftui #cloudkit
Вопрос:
Прямо сейчас я разрабатываю iOS-приложение с SwiftUI. При первом запуске приложения я сохраняю данные по умолчанию в CoreData, которые затем синхронизируются с CloudKit, чтобы сделать их доступными на всех устройствах, использующих один и тот же идентификатор Apple Id.
Я бы хотел запретить приложению сохранять данные по умолчанию несколько раз (например, когда данные уже сохранены в CloudKit, а другим устройствам не нужно сохранять их снова, потому что они могут извлекать их из iCloud). Делая это, я уже пробовал разные подходы, что не привело меня к цели:
-
Я попытался сохранить одну конкретную квартиру в CoreData и синхронизировать ее с iCloud, которая была логическим значением под названием «isAlreadyInstalled». При запуске приложения я получал его из CoreData и при необходимости пропускал установку данных по умолчанию. Проблема с этим подходом заключается в том, что я не могу дождаться синхронизации CloudKit с моей базой данных CoreData, что означает, что значение «isAlreadyInstalled» всегда равно false. Я также пробовал использовать режим ожидания на пару секунд при каждом запуске, но когда база данных CoreData и CloudKit становится больше, время ожидания будет очень неудобным для пользователя при каждом запуске приложения.
-
Я попытался использовать NSUbiquitousKeyValueStore, который изначально казался идеальным решением. Но после удаления и переустановки моего приложения и очистки базы данных CloudKit хранилище NSUbiquitousKeyValueStore не очищается, что означает, что данные по умолчанию не будут установлены. Я уже искал возможность очистки хранилища NSUbiquitousKeyValueStore, когда приложение будет удалено, но это невозможно.
Сейчас я в некотором замешательстве, потому что я не могу найти какой-либо подход, делающий установку зависимой от синхронизации iCloud или ожидающий, пока произойдет синхронизация iCloud.
Просто для справки: я не загружаю persistentStoreContainer в свой AppDelegate, потому что я написал свой собственный CoreDataHelper-класс, в котором я выполняю всю магию CoreData. Я не могу себе представить, что для моей проблемы нет решения, поскольку кажется, что действительно часто устанавливать данные по умолчанию и обмениваться ими между разными устройствами iCloud.
Я был бы очень признателен за любую помощь и, конечно, могу поделиться некоторым кодом, если это необходимо!
Комментарии:
1. Я сталкиваюсь с точно такой же проблемой, верно now..My Приложения для iOS и mac создают образцы данных. Однако при синхронизации я не хочу дублировать значения. Я еще не нашел решения. Я подумал о назначении уникального ключа, который всегда один и тот же, и тогда iCloud не должен дублировать эти значения, а объединять их.
2. Спасибо, что присоединились к @davidev. К сожалению, я не смог это исправить. Был бы признателен, если бы вы могли поделиться своим решением после его нахождения.