Заменить сущности в отношении ко многим в Базовых данных - PullRequest
2 голосов
/ 06 августа 2011

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

self.myOneSideEntity.theManySideEntitiesRelationship = [NSSet setWithArray:myNewArrayOfEntities];

Мне пришло в голову, что замена набора может не удалитьстарые участники.Что с ними случилось?Это правильный способ редактировать коллекцию связанных объектов?Я оставляю детей-сирот или иду против лучших практик с этой техникой?

Мои отношения настроены с помощью обратного каскадного удаления с одной стороны, аннулирования со многих сторон, и обратные отношения не являются обязательными.

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

Я потратил несколько дней, чтобы понять подобное поведение в моем приложении.

«Правило удаления» для отношения работает только тогда, когда сам объект, содержащий отношение, удален. Если вы просто замените один набор объектов другим (как вы делаете) - ничего не произойдет. Дочерние объекты, которые были в старом наборе, просто будут иметь обратные отношения, установленные в ноль. Поэтому, если это отношение (со стороны дочернего элемента) не является обязательным, при сохранении контекста вы получите ошибку CoreData.

Пока что я не нашел способа управлять этим, кроме ручного удаления старых объектов.

0 голосов
/ 17 декабря 2014

Для меня проблема заключалась в получении объектов, которые были связаны с текущим объектом. (groupObject.docs) Это было решено, когда я добавил контекст, по которому я получаю эти данные. Я использую MagicalRecord:

[GroupObject MR_findAllInContext:[NSManagedObjectContext MR_defaultContext]]

вместо

[GroupObject MR_findAll]
...