CoreData Object
Salut salut tout le monde.
Je suis sur une app en ce moment je doit souvent utiliser CoreDate.
J'ai donc décidé de créé une petite classe pour eviter à chaque fois de tout retaper.
Ce n'est pas très rempli pour le moment mais c'est ouvert à toute modification et ajout !
CoreDataObject.h
CoreDataObject.m
J'ai pas encore testé mais je pense que ça marche
Je suis sur une app en ce moment je doit souvent utiliser CoreDate.
J'ai donc décidé de créé une petite classe pour eviter à chaque fois de tout retaper.
Ce n'est pas très rempli pour le moment mais c'est ouvert à toute modification et ajout !
CoreDataObject.h
<br />#import <Foundation/Foundation.h><br /><br /><br />@interface CoreDataObject : NSObject {<br /> <br /> @private<br /> NSManagedObjectContext *managedObjectContext_;<br />}<br /><br /><br />@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;<br /><br /><br />-(id)initWithContext:(NSManagedObjectContext *)c;<br />- (NSMutableArray *)requestWithEntityForName:(NSString *)entityName withSort:(NSString *)s isAscending:(BOOL)a andPredicate:(NSString *)p<br />- (void)removeAllEntityObjects:(NSString *)entityName andRemoveAllObjectsOfArray:(NSMutableArray *)array<br /><br /><br />@end<br />
CoreDataObject.m
<br />#import "CoreDataObject.h"<br /><br /><br />@implementation CoreDataObject<br />@synthesize managedObjectContext = managedObjectContext_;<br /><br /><br />- (id)initWithContext:(NSManagedObjectContext *)c<br />{<br /> self = [super init];<br /> <br /> if(self)<br /> {<br /> self.managedObjectContext_ = c;<br /> }<br /> <br /> return self;<br />}<br /><br /><br />- (NSMutableArray *)requestWithEntityForName:(NSString *)entityName withSort:(NSString *)s isAscending:(BOOL)a andPredicate:(NSString *)p<br />{<br /> NSFetchRequest *request = [[NSFetchRequest alloc] init];<br /> NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext_];<br /> [request setEntity:entity];<br /><br /><br /> if(s && a)<br /> {<br /> NSSortDescriptor *sort = [[[NSSortDescriptor alloc] initWithKey:s ascending:a] autorelease];<br /> [request setSortDescriptors:[NSArray arrayWithObject:sort]];<br /> }<br /> if(p != nil)<br /> {<br /> NSPredicate *predicate = [NSPredicate predicateWithFormat:p];<br /> [request setPredicate:predicate];<br /> }<br /><br /><br /> <br /> NSError *error = nil;<br /> NSMutableArray *mutableFetchResult = [[[managedObjectContext_ executeFetchRequest:request error:&error] mutableCopy] autorelease];<br /> if(mutableFetchResult == nil)<br /> {<br /> NSLog(@"Error requestWithEntityForName \"%@\" : %@",entityName,error);<br /> }<br /> <br /> [request release];<br /> <br /> return mutableFetchResult;<br />}<br /><br /><br /><br /><br />- (void)removeAllEntityObjects:(NSString *)entityName andRemoveAllObjectsOfArray:(NSMutableArray *)array<br />{<br /> <br /> NSFetchRequest *request = [[NSFetchRequest alloc] init];<br /> NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext_];<br /><br /><br /> [request setEntity:entity];<br /> <br /> <br /> <br /> NSError * error = nil;<br /> NSArray * arrayOfObjects = [managedObjectContext_ executeFetchRequest:request error:&error];<br /> <br /> [request release];<br /> <br /> if(arrayOfObjects == nil)<br /> {<br /> NSLog(@"Error removeAllEntityObjects \"%@\" : %@",entityName,error);<br /> }<br /> <br /> for (NSManagedObject * arrayOfObject in arrayOfObjects) {<br /> [[self managedObjectContext] deleteObject:arrayOfObject];<br /> }<br /> <br /> <br /> if(array)<br /> {<br /> [array removeAllObjects];<br /> }<br /> <br />}<br /><br /><br />- (void)dealloc<br />{<br /> [managedObjectContext_ release];<br /> [super dealloc];<br />}<br /><br /><br />@end<br />
J'ai pas encore testé mais je pense que ça marche

Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
dans l'init il ne manque pas un retain?
c'est une erreur?
tu passes par le setter quand meme?
Révise vite les propriétés (Objective-C guide) avant de te faire gronder par tonton Ali.
Non là je vois pas
Parce que là ton code a beau être simple et ne pas être "très rempli" comme tu dis, bah il n'empêche qu'il va planter (quand ton objet va être détruit) !
[tt]moc = x;[/tt] utilise la variable d'instance et ne fait qu'une affectation, comme [tt]a=3[/tt]. Ca ne fait pas un retain, ça peut pas le deviner tout seul.
[tt]self.moc = x;[/tt] par contre utilise la @property et appelle donc implicitement le setter comme si tu avais fait [tt][self setMoc:x][/tt] (et là ça fait bien un retain implicite, puisque ça fait appel à la @property / au setter), etc, etc
Bon eu baffe mais que 1 une et pas très forte svp ...