2012-08-29 2 views
5

Comment puis-je coder une sous-classe init personnalisée pour NSManagedObject? Je voudrais quelque chose comme initItemWithName:Volume: par exemple. Où Item est une sous-classe NSManagedObject avec deux attributs, name et volume.Init. Personnalisée pour une sous-classe NSManagedObject

+3

Jetez un oeil à la question suivante http://stackoverflow.com/questions/10489578/custom-initializer-for-an-nsmanagedobject. Je vais vous aider probablement. –

+0

@NenadMihajlovic +1. Bon commentaire! –

Répondre

6

Carlos,

Comme Nenad Mihajlovic a suggéré que vous pourriez créer une catégorie pour cela. Par exemple, si vous avez une classe Item, vous pouvez créer une catégorie appelée Item+Management et y placer le code de création. Ici vous pouvez trouver un exemple 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; 
} 

Lorsque vous souhaitez créer un nouvel article, faire une importation comme

#import "Item+Management.h" 

et utiliser comme celui-ci

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

Cette approche est très flexible et très facile à entretenir pendant la application en cours de développement.

Vous pouvez trouver plus d'informations au Stanford Course Lecture 14 exemple de code. En outre, voir aussi des vidéos gratuites sur iTunes par Stanford (si vous avez un identifiant Apple).

Espérons que ça aide.

P.S. Par souci de simplicité, je suppose que name est un NSString et volume est un NSNumber. Pour volume, il pourrait être préférable d'utiliser le type NSDecimalNumber.

+0

Merci beaucoup Flex_Addicted !! Mais, une question: pourquoi avons-nous créer ces méthodes sur une catégorie et non dans la sous-classe 'NSManagedObject'? J'ai plusieurs classes et j'aurais besoin d'au moins 7 catégories. – Carlos

+0

Vous pouvez trouver des informations à http://stackoverflow.com/questions/9297101/nsmanagedobjects-with-categories et à http://blog.chrismiles.info/2011/06/organising-core-data-for-ios.html (J'aime beaucoup les conseils dans le dernier). Une explication simple si vous utilisez Xcode pour générer une classe personnalisée pour votre objet géré: si vous modifiez quelque chose dans votre entité, puis générez la classe pour accueillir ces modifications, Xcode remplacera le code que vous avez écrit dans la sous-classe d'origine. –

+0

J'ai compris! Merci beaucoup!! – Carlos

Questions connexes