2010-09-30 15 views
19

Ho un modello CoreData (oggetto gestito) chiamato Item:Can CoreData può gestire sottoclassi polimorfiche?

@interface Item : NSManagedObject { 
    NSString * type; 
} 
@property (retain) NSString * type; 
@end 

Ho anche due sottoclassi dell'oggetto:

@interface Circle : Item 
@end 

@interface Square : Item 
@end 

a monitorare la sottoclasse dell'elemento dalla proprietà type.

Quando recupero il mio Items, ritorno a una serie di elementi. Ma voglio essere in grado di tipizzare dinamicamente gli oggetti in base al loro type.

CoreData supporta questo in modo nativo? In caso contrario, c'è un modo per digitare dinamicamente ogni Item?

posso ottenere la classe che voglio lanciare la Item come come:

Item * item = ...; 
id klass = NSClassFromString(item.type); 

io non so come posso lanciare item come tipo klass.

risposta

27

Sì, è incorporato. Non è necessario farlo manualmente. Non è nemmeno necessario inserire la voce type.

In Objective-C c'è il concetto di superclasse/sottoclasse. Corrispondentemente, nei dati di base, c'è il concetto di entità padre/entità figlio. Questo può essere specificato nel file del modello.

Nel modellatore Core Data, creare due entità Circle e Square ereditando l'entità Item. È possibile specificare parent dell'entità nel modellatore. Quindi, nel modellatore, specificare la classe personalizzata Circle per l'entità Circle, la classe Square per l'entità Square.

Quindi, quando si recupera l'oggetto gestito dal database, viene assegnata automaticamente la classe corretta. Leggere il documentation del modellatore.

Ancora una volta, tutto può essere fatto nel modellatore, senza scrivere nulla.

+2

Grazie! È frustrante non sapere cosa cercare. Nessuna meraviglia che "sottoclasse" e "polimorfo" non abbiano restituito risultati! Come nota, la ** Guida alla programmazione dei dati fondamentali: Modelli di oggetti gestiti ** contiene informazioni molto più approfondite nelle sezioni ** Eredità delle entità ** e ** Entità astratte ** http://developer.apple .com/library/mac/# documentation/cacao/concettuale/CoreData/Articoli/cdMOM.html –

+2

Grazie per la risposta - il collegamento è rotto però, potresti aggiornare? – Benjohn

Problemi correlati