CoreData Object

CeetixCeetix Membre
janvier 2011 modifié dans Objective-C, Swift, C, C++ #1
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
<br />#import &lt;Foundation/Foundation.h&gt;<br /><br /><br />@interface CoreDataObject : NSObject {<br />&nbsp;  <br />&nbsp;  @private<br />&nbsp;  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 &quot;CoreDataObject.h&quot;<br /><br /><br />@implementation CoreDataObject<br />@synthesize managedObjectContext = managedObjectContext_;<br /><br /><br />- (id)initWithContext:(NSManagedObjectContext *)c<br />{<br />&nbsp;  self = [super init];<br />&nbsp;  <br />&nbsp;  if(self)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; self.managedObjectContext_ = c;<br />&nbsp;  }<br />&nbsp;  <br />&nbsp;  return self;<br />}<br /><br /><br />- (NSMutableArray *)requestWithEntityForName:(NSString *)entityName withSort:(NSString *)s isAscending:(BOOL)a andPredicate:(NSString *)p<br />{<br />&nbsp;  NSFetchRequest *request = [[NSFetchRequest alloc] init];<br />&nbsp;  NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext_];<br />&nbsp;  [request setEntity:entity];<br /><br /><br />&nbsp;  if(s &amp;&amp; a)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; NSSortDescriptor *sort = [[[NSSortDescriptor alloc] initWithKey:s ascending:a] autorelease];<br />&nbsp; &nbsp; &nbsp; [request setSortDescriptors:[NSArray arrayWithObject:sort]];<br />&nbsp;  }<br />&nbsp;  if(p != nil)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; NSPredicate *predicate = [NSPredicate predicateWithFormat:p];<br />&nbsp; &nbsp; &nbsp; [request setPredicate:predicate];<br />&nbsp;  }<br /><br /><br />&nbsp;  <br />&nbsp;  NSError *error = nil;<br />&nbsp;  NSMutableArray *mutableFetchResult = [[[managedObjectContext_ executeFetchRequest:request error:&amp;error] mutableCopy] autorelease];<br />&nbsp;  if(mutableFetchResult == nil)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; NSLog(@&quot;Error requestWithEntityForName &#092;&quot;%@&#092;&quot; : %@&quot;,entityName,error);<br />&nbsp;  }<br />&nbsp;  <br />&nbsp;  [request release];<br />&nbsp;  <br />&nbsp;  return mutableFetchResult;<br />}<br /><br /><br /><br /><br />- (void)removeAllEntityObjects:(NSString *)entityName andRemoveAllObjectsOfArray:(NSMutableArray *)array<br />{<br />&nbsp;  <br />&nbsp;  NSFetchRequest *request = [[NSFetchRequest alloc] init];<br />&nbsp;  NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext_];<br /><br /><br />&nbsp;  [request setEntity:entity];<br />&nbsp;  <br />&nbsp;  <br />&nbsp;  <br />&nbsp;  NSError * error = nil;<br />&nbsp;  NSArray * arrayOfObjects = [managedObjectContext_ executeFetchRequest:request error:&amp;error];<br />&nbsp;  <br />&nbsp;  [request release];<br />&nbsp;  <br />&nbsp;  if(arrayOfObjects == nil)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; NSLog(@&quot;Error removeAllEntityObjects &#092;&quot;%@&#092;&quot; : %@&quot;,entityName,error);<br />&nbsp;  }<br />&nbsp;  <br />&nbsp;  for (NSManagedObject * arrayOfObject in arrayOfObjects) {<br />&nbsp; &nbsp; &nbsp; [[self managedObjectContext] deleteObject:arrayOfObject];<br />&nbsp;  }<br />&nbsp;  <br />&nbsp;  <br />&nbsp;  if(array)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; [array removeAllObjects];<br />&nbsp;  }<br />&nbsp;  <br />}<br /><br /><br />- (void)dealloc<br />{<br />&nbsp;  [managedObjectContext_ release];<br />&nbsp;  [super dealloc];<br />}<br /><br /><br />@end<br />



J'ai pas encore testé mais je pense que ça marche :D

Réponses

  • cyranocyrano Membre
    23:55 modifié #2
    tiens une question  :D

    dans l'init il ne manque pas un retain?
  • CeetixCeetix Membre
    23:55 modifié #3
    Tu veux retain managedObjectContext_ ?
  • cyranocyrano Membre
    23:55 modifié #4
    oui

    c'est une erreur?
  • CeetixCeetix Membre
    23:55 modifié #5
    Bah moi je ferai pas de retain vu sa property l'est déjà . Enfin je vois pas pourquoi il faudrait en faire un.
  • cyranocyrano Membre
    23:55 modifié #6
    le setter est defini retain ok, mais quand en "interne" tu utilises =

    tu passes par le setter quand meme?
  • CéroceCéroce Membre, Modérateur
    23:55 modifié #7
    dans 1294157506:

    Bah moi je ferai pas de retain vu sa property l'est déjà . Enfin je vois pas pourquoi il faudrait en faire un.

    Révise vite les propriétés (Objective-C guide) avant de te faire gronder par tonton Ali.
  • CeetixCeetix Membre
    23:55 modifié #8
    :'( je veux pas !!!!
    Non là  je vois pas
  • AliGatorAliGator Membre, Modérateur
    23:55 modifié #9
    Alors 3 baffes, au lit, et tu me copieras 100x le Memory Managment Programming Guide et tous mes posts sur le sujet.
    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
  • cyranocyrano Membre
    23:55 modifié #10
    non pas les baffes quand meme.....
  • CeetixCeetix Membre
    23:55 modifié #11
    Raaa mais oui j'oublie que x = machin est différent de self.x = machin à  chaque fois ....
    Bon eu baffe mais que 1 une et pas très forte svp ...
  • AliGatorAliGator Membre, Modérateur
    23:55 modifié #12
    J'attend toujours ta copie de tous mes posts sur le sujet (dans ma boite de MP du forum, je suis magnanime je te laise jusqu'à  la fin de la semaine vu l'ampleur du boulot). Comme ça on pourra le combiner en un tuto (que j'ai pas le temps de rédiger là  en ce moment)
  • CeetixCeetix Membre
    23:55 modifié #13
    Je suis en train de le faire à  la bougie sur un vieux bureau en bois pourri  >:)
  • CeetixCeetix Membre
    23:55 modifié #14
    J'up un peu ce post pour savoir si vous avez des idées pour augmenté l'usability de ma petite classe. Des idées d'implémentation pour se faciliter la vie un peu plus :)
Connectez-vous ou Inscrivez-vous pour répondre.