2012-08-29 24 views
5

¿Cómo puedo codificar una subclase personalizada init para NSManagedObject? Me gustaría algo como initItemWithName:Volume:, por ejemplo. Donde Item es una subclase NSManagedObject con dos atributos, name y volume.Inicial personalizada para una subclase NSManagedObject

+3

Eche un vistazo a la siguiente pregunta http://stackoverflow.com/questions/10489578/custom-initializer-for-an-nsmanagedobject. Probablemente te ayude. –

+0

@NenadMihajlovic +1. ¡Buen comentario! –

Respuesta

6

Carlos,

Como Nenad Mihajlovic sugirió que podría crear una categoría para esto.

Así, por ejemplo, si tiene una clase Item, puede crear una categoría llamada Item+Management y colocar allí el código de creación. Aquí puedes encontrar un ejemplo simple.

// .h 

@interface Item (Management) 

+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context; 

@end 

// .m 

+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context 
{ 
    Item* item = (Item*)[NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context]; 
    theItem.name = theName; 
    theItem.volume = theVolume; 

    return item; 
} 

Cuando se desea crear un nuevo artículo, realice una importación como

#import "Item+Management.h" 

y utilizar como esto

Item* item = [Item itemWithName:@"test" volume:[NSNumber numberWithInt:10] inManagedObjectContext:yourContext]; 
// do what you want with item... 

Este enfoque es muy flexible y muy fácil de mantener durante la desarrollo de aplicaciones.

Puede encontrar más información en Stanford Course Lecture 14 código de muestra. Además, vea también videos gratis en iTunes de Stanford (si tiene una ID de Apple).

Espero que ayude.

P.S. En aras de la simplicidad, supongo que name es un NSString y volume es un NSNumber. Para volume, podría ser mejor utilizar el tipo NSDecimalNumber.

+0

Muchas gracias Flex_Addicted !! Pero, una pregunta: ¿por qué tenemos que crear estos métodos en una categoría y no en la subclase 'NSManagedObject'? Tengo varias clases y necesitaría al menos 7 categorías. – Carlos

+0

Puede encontrar información en http://stackoverflow.com/questions/9297101/nsmanagedobjects-with-categories y en http://blog.chrismiles.info/2011/06/organising-core-data-for-ios.html (Me gustan mucho los consejos en este último). Una explicación simple si usa Xcode para generar una clase personalizada para su objeto administrado: si modifica algo en su entidad y luego genera la clase para acomodar esos cambios, Xcode sobrescribirá el código que ha escrito en la subclase original. –

+0

¡Entendido! ¡¡Muchas gracias!! – Carlos

Cuestiones relacionadas