2013-12-11 2 views
6

Я ищу, чтобы выполнить некоторое простое удаление с данными Core, но вам просто нужно немного советов по этому поводу.Удаление объектов связи с каскадом в данных ядра

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

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

Первая вкладка использует NSFetchedResultController с fetchRequest в сущности транзакции. Вторая вкладка использует Entity Name, третий использует Event, а четвертый использует Date Entity.

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

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

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

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

EDIT: Обновление включает модели

данных Примечание: Год Entity является экспериментальным и в настоящее время не используется enter image description here Как бы я идти о делать что-то вроде этого?

Благодаря

+0

Это поможет, если вы разместите снимок экрана своей модели Core Data. –

+0

Спасибо Martin - обновленный вопрос, чтобы включить модель – amitsbajaj

ответ

8

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

+0

Я думаю, он знает, что ... – Mundi

+1

С этой конфигурацией, как об удалении всех транзакций Person без удаления человека?Достаточно ли устанавливать транзакции на «nil» или опорожнять? – Rivera

+1

@Rivera: Нет. «Правила удаления» применяются только в том случае, если объект * удален *. –

0

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

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

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

-(void)removeTransactionsObject:(Transaction *)value { 
    [super removeTransactionsObject:value]; 
    if (!self.transactions.count) { 
     [self.managedObjectContext deleteObject:self]; 
    } 
} 
Смежные вопросы