J'ai trouvé une réponse définitive de Plus de développement iPhone 3 par Dave Mark et Jeff LeMarche.
Si cela vous dérange vraiment que vous utilisez une méthode sur NSEntityDescrpiton
plutôt que sur NSManagedObjectContext
d'insérer un nouvel objet dans un NSManagedObjectContext
, vous pouvez utiliser une catégorie d'ajouter une méthode d'instance à NSManagedObjectContext
.
créer deux nouveaux fichiers texte appelés NSManagedObject-Insert.h et NSManagedObject-Insert.m.
Dans NSManagedObject-Insert.h, placez le code suivant:
import <Cocoa/Cocoa.h>
@interface NSManagedObjectContext (insert)
- (NSManagedObject *)insertNewEntityWithName:(NSString *)name;
@end
Dans NSManagedObject-Insert.m, placez ce code:
#import "NSManagedObjectContext-insert.h"
@implementation NSManagedObjectContext (insert)
- (NSManagedObject *)insertNewEntityWithName:(NSString *)name
{
return [NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:self];
}
@end
Vous pouvez importer NSManagedObject -Insert.h partout où vous souhaitez utiliser cette nouvelle méthode.Remplacez ensuite les appels d'insertion contre NSEntityDescription
, comme celui-ci:
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
avec la plus courte et plus intuitive un:
[context insertNewEntityWithName:[entity name]];
catégories ne sont pas grand?
Oh oui, mais ne remplacent jamais 'initWithEntity: insertIntoManagedObjectContext:'. 'awakeFromInsert' est l'endroit approprié pour faire l'initialisation. – Alex