Изтриване на обекти за връзка с каскада в основните данни

Търся да извърша малко просто изтриване с Core данни, но просто имам нужда от малко съвет относно това, моля.

Имам модел с обекти транзакция, име, събитие и дата. Транзакцията има връзка към всеки от другите субекти.

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

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

Ако изтрия запис от раздела Транзакции, той изтрива само тази транзакция, което има смисъл.

Това, което искам, е да мога да изтрия човек от раздела Име или събитие от раздела Събитие и това да бъде каскадно през модела на приложението. Така че, ако Боб има множество транзакции, изтриването на раздела за транзакции при него ще изтрие тази една транзакция.

Ако изтрия BOB от раздела за име, това би трябвало да го изтрие от всяко събитие, в което е участвал с всяка дата и транзакция.

Същото важи и за събитията и датите.

РЕДАКТИРАНЕ: Актуализирайте, за да включите модел на данни

Забележка: Обектът на годината е експериментален и в момента не се използва въведете описание на изображението тукКак Да правя нещо подобно?

Благодаря


person amitsbajaj    schedule 11.12.2013    source източник
comment
Ще помогне, ако публикувате екранна снимка на вашия модел на основни данни.   -  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

Първо, не виждам мъдростта на абстрахирането на датите в обекти. Може би можете да ме просветлите. Според мен датата принадлежи на сделката. В раздела за дата все още трябва да извличате транзакции, но ги представяте групирани и сортирани по различен начин.

Предполагам, че знаете как да направите каскадни взаимоотношения между човек и транзакция. Това ще премахне всички транзакции, свързани с дадено лице. Същото важи и за Event.

Каскадирането в другата посока обаче е по-проблематично. Трябва по някакъв начин да проверите дали това е последният член на връзката към много и да го изтриете само ако е. Един от начините да направите това е да замените сетерите. Във вашите генерирани NSManagedObject подкласове ще намерите автоматично генерираните настройки, включително тези за добавяне или премахване на обекти от набори (т.е. релации към много).

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