Как сохранить, если данные по умолчанию установлены в приложении iOS, которое делится данными с iCloud

#ios #core-data #swiftui #cloudkit

#iOS #core-данные #swiftui #cloudkit

Вопрос:

Прямо сейчас я разрабатываю iOS-приложение с SwiftUI. При первом запуске приложения я сохраняю данные по умолчанию в CoreData, которые затем синхронизируются с CloudKit, чтобы сделать их доступными на всех устройствах, использующих один и тот же идентификатор Apple Id.

Я бы хотел запретить приложению сохранять данные по умолчанию несколько раз (например, когда данные уже сохранены в CloudKit, а другим устройствам не нужно сохранять их снова, потому что они могут извлекать их из iCloud). Делая это, я уже пробовал разные подходы, что не привело меня к цели:

  1. Я попытался сохранить одну конкретную квартиру в CoreData и синхронизировать ее с iCloud, которая была логическим значением под названием «isAlreadyInstalled». При запуске приложения я получал его из CoreData и при необходимости пропускал установку данных по умолчанию. Проблема с этим подходом заключается в том, что я не могу дождаться синхронизации CloudKit с моей базой данных CoreData, что означает, что значение «isAlreadyInstalled» всегда равно false. Я также пробовал использовать режим ожидания на пару секунд при каждом запуске, но когда база данных CoreData и CloudKit становится больше, время ожидания будет очень неудобным для пользователя при каждом запуске приложения.

  2. Я попытался использовать NSUbiquitousKeyValueStore, который изначально казался идеальным решением. Но после удаления и переустановки моего приложения и очистки базы данных CloudKit хранилище NSUbiquitousKeyValueStore не очищается, что означает, что данные по умолчанию не будут установлены. Я уже искал возможность очистки хранилища NSUbiquitousKeyValueStore, когда приложение будет удалено, но это невозможно.

Сейчас я в некотором замешательстве, потому что я не могу найти какой-либо подход, делающий установку зависимой от синхронизации iCloud или ожидающий, пока произойдет синхронизация iCloud.

Просто для справки: я не загружаю persistentStoreContainer в свой AppDelegate, потому что я написал свой собственный CoreDataHelper-класс, в котором я выполняю всю магию CoreData. Я не могу себе представить, что для моей проблемы нет решения, поскольку кажется, что действительно часто устанавливать данные по умолчанию и обмениваться ими между разными устройствами iCloud.

Я был бы очень признателен за любую помощь и, конечно, могу поделиться некоторым кодом, если это необходимо!

Комментарии:

1. Я сталкиваюсь с точно такой же проблемой, верно now..My Приложения для iOS и mac создают образцы данных. Однако при синхронизации я не хочу дублировать значения. Я еще не нашел решения. Я подумал о назначении уникального ключа, который всегда один и тот же, и тогда iCloud не должен дублировать эти значения, а объединять их.

2. Спасибо, что присоединились к @davidev. К сожалению, я не смог это исправить. Был бы признателен, если бы вы могли поделиться своим решением после его нахождения.

3. developer.apple.com/documentation/foundation/…