2013-12-11 18 views
6

Sto cercando di eseguire una semplice eliminazione con i dati di base ma ho solo bisogno di un po 'di consigli su questo per favore.Eliminazione di oggetti di relazione con Cascade nei dati principali

Ho un modello con Transaction, Name, Event e Date Entities. La Transazione ha un link a ciascuna delle altre Entità.

Nell'applicazione, quando un utente aggiunge informazioni ai campi di testo, viene salvato in un controller di visualizzazione tabella a 4 schede.

La prima scheda utilizza NSFetchedResultController con un'istruzione fetchRequest sull'entità di transazione. La seconda scheda utilizza l'entità nome, la terza utilizza l'evento e la quarta utilizza l'entità data.

Se elimino una voce dalla scheda Transazione, elimina solo quella transazione che ha senso.

Quello che voglio è essere in grado di eliminare una persona dalla scheda Nome, o un evento dalla scheda Evento e farlo passare attraverso il modello dell'app. Quindi, se Bob ha più transazioni, cancellando la scheda della transazione si cancellerà quella transazione.

Se cancello BOB dalla scheda del nome, dovrebbe eliminarlo da tutti gli eventi a cui era parte ogni data e Transazione.

Lo stesso vale per gli eventi e le date.

EDIT: aggiornamento per includere modello di dati

Nota: Anno Entity è sperimentale e attualmente non utilizzato enter image description here Come potrei fare per fare qualcosa di simile?

Grazie

+0

Sarebbe utile se pubblichi uno screenshot del tuo modello di Core Data. –

+0

Grazie Martin - domanda aggiornata per includere il modello – amitsbajaj

risposta

8

se si imposta la "Cancellazione Regola" per la relazione "transazioni" da Person a Transaction a "cascata", quindi l'eliminazione di una persona cancellerà automaticamente tutte le transazioni correlate.

+0

Penso che lui sappia che ... – Mundi

+1

Con questa configurazione e riguardo l'eliminazione di tutte le transazioni di Persona senza eliminare la persona?Sarebbe sufficiente impostare le transazioni su "zero" o svuotarle? – Rivera

+1

@Rivera: No. Le "Regole di cancellazione" vengono applicate solo se un oggetto è * cancellato *. –

0

In primo luogo, non riesco a vedere la saggezza di astrarre date in entità. Forse mi puoi illuminare. Nella mia mente, la data appartiene alla transazione. Nella scheda della data devi ancora recuperare le transazioni ma presentarle raggruppate e ordinate in modo diverso.

Suppongo che tu sappia come rendere a cascata le relazioni tra Persona e Transazioni. Questo rimuoverà tutte le transazioni associate a una persona. Lo stesso vale per l'evento.

Il collegamento a cascata nell'altra direzione, tuttavia, è più problematico. Devi in ​​qualche modo verificare se è lo membro della relazione to-many dell'e se lo è. Un modo per farlo è scavalcare i setter. Nelle sottoclassi NSManagedObject generate troverai i setter generati automaticamente, inclusi quelli per l'aggiunta o la rimozione di oggetti dai set (cioè le relazioni to-many).

-(void)removeTransactionsObject:(Transaction *)value { 
    [super removeTransactionsObject:value]; 
    if (!self.transactions.count) { 
     [self.managedObjectContext deleteObject:self]; 
    } 
} 
Problemi correlati