Как избежать назначения объектов CoreData в двух разных зонах записей CloudKit?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать назначения объектов CoreData в двух разных зонах записей CloudKit?

Сообщение Anonymous »


Я запустил приложение с CoreData, и все работало отлично. Затем я перешел на CloudKit, и все пошло не так. Последние несколько недель меня регулярно преследуют ошибки

ошибка: CoreData+CloudKit: -NSCloudKitMirroringDelegate _requestAbortedNotInitialized:: — никогда не инициализируется успешно и не может быть выполнено запрос ' A1AD2329-41F4-44F6-BEF6-452A62C7B2C0' из-за ошибки: Ошибка Domain=NSCocoaErrorDomain Code=134060 «Произошла ошибка основных данных». UserInfo={NSLocalizedFailureReason=Обнаружено повреждение графа объекта. Объекты, связанные с '0xb925efc0b75e6e2c x-coredata://7974B0E0-2A86-4F52-B0B3-72F8FAE3AFB1/ShotCoreData/p2447' назначены нескольким зонам: {( , )}}

У меня довольно сложная настройка CoreData, которая выглядит примерно так: Мастер
[*]Категория1 Ребенок 1 Ребенок2 Child3 (который будет содержать ссылку на идентификатор, строку UUID, на категорию2) [*]Категория2
Код для сохранения объектов из версии приложения в CoreData выглядит примерно так:

func saveObject(_ newObject: AppModel) { пусть newCoreObject = Категория1() newCoreObject.child1 = ConvertChild1 (из: newObject.child1Models) сохранитьКонтекст() } частная функция ConvertChild1 (из источника: [Child1AppModel]) -> [Child1] { источник.compactMap { пусть coreModel = Child1AppModel($0) coreModel.child2 = ConvertChild2 (из: source.child2Models) } } частная функция ConvertChild2 (из источника: [Child2AppModel]) -> [Child2] { // Создаем объект CoreData и присваиваем свойства, сопоставленные с версией AppModel } Мне кажется, что иногда при создании объектов Child2 или Child3 они назначаются нескольким зонам, как зоне по умолчанию, так и пользовательской зоне (после назначения категории 1), что приводит к повреждению графа CoreData и данные блокируются локально , удаленная синхронизация больше не выполняется.

Итак, у меня осталось два вопроса:
[*]Почему это происходит? Есть ли какой-то трюк, который мне не хватает, чтобы обеспечить размещение новых объектов только в правильной зоне? В настоящее время я полагаюсь на то, что CoreData "получит это", и не выполняю никаких ручных назначений для отдельных элементов. [*]Как безопасно перенести данные в случае такого повреждения? Должен ли я вручную проанализировать каждый тип объекта из зоны по умолчанию (com.apple.coredata.cloudkit.zone) и убедиться, что я удалю его отсюда, если он присутствует в пользовательской зоне? Или есть более общий вариант получения затронутых объектов и удаления клонов (например: получить элементы, находящиеся в ZoneA и ZoneB, а затем удалить их из ZoneB)?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Возможна ли необлегченная миграция CoreData с CloudKit?
    Гость » » в форуме IOS
    0 Ответы
    63 Просмотры
    Последнее сообщение Гость
  • Миграция локальных CoreData в CloudKit (и наоборот)
    Anonymous » » в форуме IOS
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous
  • Проблемы синхронизации CoreData + CloudKit: наблюдаемые сохранения контекста и пропущенные миграции
    Anonymous » » в форуме IOS
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Я построил свое первое приложение: зоны сердечного ритма плюс. Пришло время в зонах пульса. Счастлив получить отзыв
    Anonymous » » в форуме IOS
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Аудио маршрутизация в нескольких зонах через трубопровод Gstreamer
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»