2010-09-30 7 views
19

que tienen un modelo CoreData (objeto administrado) llamado artículo:¿Puede CoreData manejar subclases polimórficas?

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

también tengo dos subclases de artículo:

@interface Circle : Item 
@end 

@interface Square : Item 
@end 

puedo realizar el seguimiento de la subclase del tema por la propiedad type.

Cuando obtengo mi Items, recupero una serie de elementos. Pero quiero ser capaz de encasillar dinámicamente los elementos de acuerdo con su type.

¿CoreData admite esto de forma nativa? De lo contrario, ¿hay alguna forma de escribir de forma dinámica cada Item?

puedo conseguir la clase que quiero emitir el Item como como:

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

Simplemente no sé cómo puedo echar item tipo klass.

Respuesta

27

Sí, está integrado. No tiene que hacerlo manualmente. Ni siquiera tiene que poner la entrada type usted mismo.

En Objective-C existe el concepto de superclase/subclase. Correspondientemente, en Core Data, existe el concepto de entidad padre/entidad hijo. Esto se puede especificar en el archivo de modelo.

En el modelador de Datos centrales, cree dos entidades Circle y Square heredando su entidad Item. Puede especificar el parent de la entidad en el modelador. Luego, en el modelador, especifique la clase personalizada Circle para su entidad Circle, la clase Square para la entidad Square.

Luego, cuando recupera el objeto administrado de la base de datos, se asigna automáticamente la clase correcta. Lea el documentation del modelador.

De nuevo, todo se puede hacer en el modelador, sin que usted escriba nada.

+2

Gracias! Es frustrante no saber qué buscar. ¡No es de extrañar que "subclase" y "polimórfico" no devolvieran resultados! Solo como una nota, la ** Guía de programación de datos básicos: Modelos de objetos administrados ** tiene mucha más información en profundidad en las secciones ** Entity Heredness ** y ** Abstract Entities ** http://developer.apple .com/library/mac/# documentation/cocoa/conceptual/CoreData/Articles/cdMOM.html –

+2

Gracias por la respuesta - el enlace está roto, ¿podría actualizar? – Benjohn

Cuestiones relacionadas