Вы теряете связь при удалении объектов ProductGroup
, потому что Базовые данные не являются SQLВ случае отношений, Core Data не заботится об атрибутах объекта на другой стороне отношения, он просто нацелен на конкретный объект.Вы можете иметь произвольное количество объектов с одинаковыми атрибутами, но разные отношения и объекты будут совершенно разными.Отношение Core Data - это не соединение или ключ SQL, а постоянная ссылка в виде указателя на конкретный управляемый объект.Удалите объект, и указатель также должен уйти.
Чтобы выполнить то, что вы хотите, вы можете использовать извлеченное свойство, которое будет извлекать атрибут Product.id
динамически.Однако это довольно неуклюжий способ ведения дел.В этом случае вам не нужно прибегать к извлеченному свойству.
Я думаю, вам нужно переосмыслить свой дизайн.Я никогда не видел случая, чтобы вам приходилось удалять каждый экземпляр сущности / класса просто для добавления или удаления объектов.На практике вы не можете сделать это за один раз.Вместо этого вы должны выбрать объекты, а затем удалить их один за другим.Возможно, вы хорошо проверили каждый объект, нужно ли его удалять или обновлять, пока вы на нем.
Звучит так, как будто вы получаете большой объем данных в формате SQL с сервера и думаете, что вам нужно построить граф объектов с нуля.Вы действительно не должны этого делать.В любом случае вам необходимо проанализировать данные для создания новых ProductGroup
объектов, поэтому вы должны использовать результаты этого анализа для изменения существующих ProductGroup
объектов.
В псевдокоде это будет выглядеть так:
Add a "synced" flag to ProductGroup entity in the data model
Set "synced" of every ProductGroup object to "false"
Extract data for a ProductGroup from server glob
Using data fetch for an existing ProductGroup object
If extracted data matches and existing ProductGroup object
update existing ProductGroup object
set synced of ProductGroup object to true
else
create new ProductGroup object with data
set synced of new ProductGroup object to true
Delete all ProductGroup objects where synced == false
Здесь важно помнить, что вы имеете дело с объектами, а не с таблицами, столбцами, строками или объединениями.Специалисты по SQL часто предполагают, что Core Data - это просто оболочка объекта вокруг SQL.Это не.Это менеджер графов объектов, который может или не может использовать SQL далеко за кулисами, чтобы сохранить (заморозить) граф объектов на диск.
Вы должны всегда думать об объектах.Интуиция, разработанная вами для работы с SQL, скорее сбивает вас с толку, чем помогает с базовыми данными.