Nella mia app ho UITableViewController
che mostra la lista degli eventi. Questo controller utilizza ManagedObjectContext Say ParentContext
. Ora se è selezionato un evento, viene mostrato un controller di visualizzazione dettagliato in cui gli utenti possono modificare i dettagli dell'evento. Così ho creato un contesto bambino dire,Dati principali Multi livello padre - Contesto figlio
ChildContext with type "NSPrivateQueueConcurrencyType"
ChildContext whose parent Context is "ParentContext".
Il mio codice è:
NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = self.context ;
Ora di nuovo ci sono alcuni campi e le relazioni che ha bisogno di un altro drill-down. Così ho creato un altro ChildContext per il nuovo controller della vista dire,
GrandChildContext with type "NSPrivateQueueConcurrencyType"
GrandChildContext whose parent context is "ChildContext"
questo processo va per un altro livello (livello 4 Totale dai genitori (tableView) per bambino)
self.context - Parent Context
|
|
ChildContext
|
|
GrandChildContext
|
|
GrandGrandChildContext
My Entity Assomiglia a questo
EntityA -- (Edit View Controller - uses ChildContext)
|
|- Field1
|
|- Field2
|
|- RelationShip (1 to Many) - (Relationship Add/Edit View Controller - uses GrandChildContext)
|
|- Field1
| .
| .
|- Field3
|
|- Relationship (1 to Many) - (Relationship Add/Edit View Controller - uses GrandGrandChildContext)
|
|- Field1
|
|- Field2
È questo il modo corretto di utilizzare il contesto padre-figlio? Perché ad un certo punto di tempo avrò come 1 NSMainQueueConcurrencyType MOC and 3 NSPrivateQueueConcurrencyType MOC
.
Se non lo è? c'è qualche altro modo?
Troppi contesti figli influiscono sulle prestazioni delle app?
Inizialmente ho utilizzato Proprietà e NSArrays per gestire i dati immessi dall'utente e quando l'utente preme il pulsante Esegui, aggiornerò/creerò oggetti gestiti. Ma questo è un lavoro noioso che ha reso il mio controller di visualizzazione sporco. Così sono passato al contesto Parent-Child, che è molto facile da salvare/scartare gli aggiornamenti.
Grazie
In tutti i drill down ho un'attività di modifica. Sono appena riuscito a ridurre alcune operazioni di salvataggio/annullamento in alcuni dei drill down. Dopo aver lavorato con questo modello per un po 'di tempo, l'unico problema che ho riscontrato è che la relazione creata non è visibile nel figlio genitore. Questo accade solo in iOS 5, si tratta di un bug noto e l'ho risolto chiamando getPermanentIDs appena prima di salvare contesti figlio – krishnan
Oh mio dio, + krishnan, ho strappato i capelli a metà prima di trovare questo commento e ho provato ad aggiungere una chiamata getPermanentIDs. –