2013-12-11 11 views
6

Chciałbym wykonać proste skasowanie danych w rdzeniu, ale potrzebuję tylko porady na ten temat.Usuwanie obiektów relacji z kaskadą w danych podstawowych

Mam model z elementami transakcji, nazwy, zdarzeń i dat. Transakcja zawiera link do każdej z pozostałych Jednostek.

W aplikacji, gdy użytkownik dodaje informacje do pól tekstowych, zapisywany jest do kontrolera widoku tabeli z 4 kartami.

Pierwsza zakładka używa NSFetchedResultController z fetchRequest w Podmiotu transakcji. Druga karta używa nazwy podmiotu, trzecia używa zdarzenia, a czwarta używa jednostki daty.

Po usunięciu wpisu z zakładki Transakcja usuwa tylko tę transakcję, która ma sens.

To, czego chcę, to móc usunąć osobę z karty Nazwa lub wydarzenie z zakładki Zdarzenie i przenieść ją kaskadowo do modelu aplikacji. Jeśli więc Bob ma wiele transakcji, usunięcie go na karcie transakcji spowoduje usunięcie tej jednej transakcji.

Jeśli usuwam BOB z zakładki nazwa, powinien on usuwać go z każdego wydarzenia, w którym był nieobecny, z każdą datą i Transakcją.

To samo dotyczy wydarzeń i dat.

EDIT: Aktualizacja obejmuje model danych

Uwaga: Rok Podmiot jest eksperymentalna i obecnie nie są używane enter image description here Jak bym go o to robi coś takiego?

Dzięki

+0

Pomoże Ci opublikować zrzut ekranu modelu Core Data. –

+0

Dzięki Martin - zaktualizowane pytanie o model – amitsbajaj

Odpowiedz

8

Jeśli ustawisz „Usunięcie Rule” do „transakcji” relacji z Person do Transaction do „Kaskada”, a następnie usuwając osobę automatycznie usunie wszystkie podobne transakcje.

+0

Myślę, że on wie, że ... – Mundi

+1

W tej konfiguracji, co z usuwaniem wszystkich transakcji osoby bez usuwania osoby?Czy wystarczy ustawić transakcję na 'nil' lub opróżnić? – Rivera

+1

@Rivera: Nie. "Reguły usuwania" są stosowane tylko wtedy, gdy obiekt jest * usunięty *. –

0

Po pierwsze, nie widzę mądrości abstrakcji dat w byty. Może możesz mnie oświecić. Według mnie data należy do transakcji. Na karcie daty nadal musisz pobrać transakcje, ale przedstawić je w inny sposób pogrupowane i posortowane.

Przypuszczam, że wiesz, jak doprowadzić kaskadowo relacje między osobami prywatnymi. Spowoduje to usunięcie wszystkich transakcji powiązanych z daną osobą. To samo dotyczy wydarzenia.

Kaskadowanie w innym kierunku jest jednak bardziej problematyczne. Musisz w jakiś sposób sprawdzić, czy jest to członek relacji do-wielu i tylko usunąć go, jeśli tak jest. Jednym ze sposobów na to jest przesłonięcie ustawiających. W wygenerowanych podklasach NSManagedObject znajdują się automatycznie generowane setery, w tym te służące do dodawania lub usuwania obiektów z zestawów (tj. Relacji do wielu).

-(void)removeTransactionsObject:(Transaction *)value { 
    [super removeTransactionsObject:value]; 
    if (!self.transactions.count) { 
     [self.managedObjectContext deleteObject:self]; 
    } 
} 
Powiązane problemy