Удаление объектов отношений с помощью Cascade в Core Data

Я хочу выполнить простое удаление с данными Core, но мне нужен совет по этому поводу, пожалуйста.

У меня есть модель с транзакциями, именами, событиями и датами. Транзакция имеет ссылку на каждую из других Сущностей.

В приложении, когда пользователь добавляет информацию в текстовые поля, она сохраняется в контроллере табличного представления с 4 вкладками.

Первая вкладка использует NSFetchedResultController с fetchRequest в сущности транзакции. Вторая вкладка использует объект имени, третья — событие, а четвертая — объект даты.

Если я удалю запись на вкладке «Транзакция», она удалит только ту транзакцию, которая имеет смысл.

Я хочу иметь возможность удалить человека с вкладки «Имя» или событие с вкладки «Событие» и каскадировать его через модель приложения. Таким образом, если у Боба есть несколько транзакций, удаление вкладки транзакций удалит эту транзакцию.

Если я удалю BOB из вкладки имени, он должен удалить его из каждого события, в котором он участвовал, с каждой датой и транзакцией.

То же самое относится к событиям и датам.

EDIT: обновить, чтобы включить модель данных

Примечание. Объект года является экспериментальным и в настоящее время не используется введите здесь описание изображенияКак Я собираюсь сделать что-то вроде этого?

Спасибо


person amitsbajaj    schedule 11.12.2013    source источник
comment
Было бы полезно, если бы вы опубликовали скриншот своей модели Core Data.   -  person Martin R    schedule 11.12.2013
comment
Спасибо, Мартин - обновленный вопрос, чтобы включить модель   -  person amitsbajaj    schedule 11.12.2013


Ответы (2)


Если вы установите «Правило удаления» для отношения «транзакции» от Person до Transaction на «Каскад», то удаление человека автоматически удалит все связанные транзакции.

person Martin R    schedule 11.12.2013
comment
С этой конфигурацией как насчет удаления всех транзакций человека без удаления человека? Будет ли достаточно установить для транзакций значение nil или очистить его? - person Rivera; 27.05.2015
comment
@Rivera: Нет. Правила удаления применяются только в том случае, если объект удален. - person Martin R; 27.05.2015
comment
@MartinR Если объект транзакции был удален и существует каскадная связь от транзакции к человеку. Будет ли сущность транзакции удалена из набора транзакций человека? - person Yatheesha; 29.05.2015

Во-первых, я не вижу смысла абстрагировать даты в сущности. Может быть, вы можете просветить меня. На мой взгляд, дата принадлежит сделке. На вкладке даты вам по-прежнему нужно получать транзакции, но представлять их сгруппированными и отсортированными по-разному.

Я полагаю, вы знаете, как сделать ваши отношения «человек-транзакция» каскадными. Это удалит все транзакции, связанные с человеком. То же самое относится и к Событию.

Однако каскадирование в другом направлении более проблематично. Вы должны каким-то образом проверить, является ли он последним членом отношения ко многим, и удалить его только в том случае, если это так. Один из способов сделать это — переопределить сеттеры. В сгенерированных вами подклассах NSManagedObject вы найдете автоматически сгенерированные установщики, в том числе для добавления или удаления объектов из наборов (т. е. отношений ко многим).

-(void)removeTransactionsObject:(Transaction *)value {
    [super removeTransactionsObject:value];
    if (!self.transactions.count) {
       [self.managedObjectContext deleteObject:self];
    }
}
person Mundi    schedule 11.12.2013