2010-08-26 9 views
6

Sto provando a scrivere un sistema preferito per la mia app. Ho già convertito il mio modello in un oggetto gestito. Quindi immagina che all'utente venga presentata una schermata con un elenco di tali oggetti. Possono scegliere di salvarne alcuni nei loro preferiti, che li manterranno nei dati principali.Dati principali: creare più oggetti gestiti, ma salvarne solo alcuni?

Il problema è che quando creo tutti questi oggetti modello, lo faccio con il contesto dell'oggetto gestito. Se l'utente salva uno solo nei suoi preferiti, salverà l'intero contesto e persisterà ogni singola entità. Gli extra non saranno tra i loro preferiti, poiché aggiungere ai preferiti costruisce un'entità "preferita" che viene salvata e punta all'oggetto, che gli altri non avranno. Ma tutti gli altri oggetti saranno salvati inutilmente.

Qual è la soluzione standard per questo/modo standard per progettare un sistema di iPhone preferito? Devo separare il mio modello in due classi, quella che mostro all'utente, e poi quella che salva in db? In questo modo ho potuto costruire i miei modelli senza inserirli nel MOC. Ma quella sarebbe una classe duplicata con tutti gli stessi campi.

risposta

6

Non c'è davvero un modo standard per farlo perché Core Data si aspetta che tu salvi gli oggetti che crei. Tuttavia, se si creano gli oggetti con:

id object = [[NSManagedObject alloc] initWithEntityDescription:entity inManagedObjectContext:nil]; 

Non avranno un contesto da salvare contro. Poi per i più è necessario salvare è possibile:

[[self managedObjectContext] insertObject:object]; 

quindi chiamare -save: sul contesto e solo quelli che hanno avuto il loro set contesto salverà.

+0

E questo è sicuro? Ho visto che il metodo pratico per la costruzione di NSMO sostituisce una porzione piuttosto ampia di codice. – Tesserex

+0

Sì, è sicuro, quale metodo di convenienza? Il metodo che ho descritto è lo stesso di chiamare '[NSEntityDescription insert ...]'. L'unica differenza è che il metodo 'NSEntityDescription' restituisce un oggetto autoreleased. –

+1

Ok, hai solo la tua seconda cosa all'indietro. La chiamata corretta è '[[self managedObjectContext] addObject: object]', il contrario che hai lì non esiste. – Tesserex

0

Non sarebbe più semplice avere una proprietà isFavorite sugli oggetti gestiti. Quindi nella tua vista preferiti puoi filtrare in base a ciò?

+3

Ma ciò non impedisce il fatto che sto salvando un sacco di dati che non mi servono. – Tesserex