Coredata объединяет отношения, а не перезаписывает их - PullRequest
0 голосов
/ 23 октября 2019

У меня есть две сущности coredata, скажем, Class и Student с отношением один ко многим (Каскадное удаление, заказано). Я включил уникальное ограничение на индивидуальный идентификатор объекта. customId не является обязательным. Когда я создаю новый объект ClassX со студентами A и B, он работает нормально.

Я обновляю этот объект (класс) путем создания нового объекта с тем же «customId», в котором определены все отношения. Например, теперь в ClassX есть учащиеся C и D. Когда я сохраняю контекст, это приводит к конечному объекту ClassX со студентами A, B, C и D. Здесь предполагается, что все отношения будут перезаписаны, а класс X должен иметь толькоC и D. как студенты.

Я пробовал разные политики слияния (NSMergeByPropertyObjectTrumpMergePolicy и NSOverwriteMergePolicy), но оба заканчивают тем, что объединяли объекты отношений вместо перезаписи

Я что-то здесь упустил?

1 Ответ

0 голосов
/ 23 октября 2019

Базовые данные по умолчанию создают отношения один-ко-многим с объектом для стороны «ко-многим» отношения типа NSSet.

NSSet представляет уникальную коллекцию объектов. Документация Apple .

Если вы установите флажок «Упорядочено» в редакторе объектной модели, вместо NSSet, Core Data предоставит объект «to-many» типа NSOrderedSet. Документация Apple .

Набор по своей природе и, как уже упоминалось выше, уникальная коллекция. Для получения дополнительной информации об этом есть несколько хороших блогов по коллекциям, которые я бы посоветовал прочитать. Если я найду какие-либо ссылки, я выложу их здесь.

Таким образом, когда вы добавляете объект в отношение «ко-многим», стандартный код, подготовленный Xcode и платформой Core Data, добавит объект в набор.

Если вы хотите «перезаписать» ... вам нужно сначала удалить существующие объекты, а затем добавить новые объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...