CoreData : Custom Classes avec calculs

cargocargo Membre
09:29 modifié dans API AppKit #1
Mes premières lignes de code...  :)
* soit un model entity A <--->> entity B
* soit un calcul à  faire dans l'entity A qui concerne 2 de ses properties "nombreinitial" , "nombreactuel", nombreinitial est rentré à  la main par l'utilisateur, nombreactuel se calcule automatiquement au fil des attributions d'objets de l'entity A, à  l'entity B via la relationship : il faut donc soustraire à  nombre initial le nombre d'objets dans B qui correspondent à  l'instance de l'objet de A, cà d qui sont "attribués" à  A.

Voilà  ce que je pense mettre dans la custom class de A "nombreactuel" pour renvoyer ce calcul. Attention les yeux...
<br />-(NSNumber*)nombreActuel<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; return [NSNumber[[self valueForKey:@&quot;nombreInitial&quot;]-[self valueForKeyPath.@&quot;nomdelarelationship.@count&quot;]] ; <br />}<br /><br />


:o

J'ai bon ? J'essaye pour voir...

Réponses

  • cargocargo Membre
    mars 2006 modifié #2
    En me relisant je me dis qu'il manque qqchose : ça ne veut rien dire d'envoyer une valeur comme message à  NSNumber

    Ca serait plutôt ça :
    <br />-(NSNumber*)nombreActuel<br />{<br />        return [NSNumber numberWithInt:[[self valueForKey:@&quot;nombreInitial&quot;]-[self valueForKeyPath.@&quot;nomdelarelationship.@count&quot;]] ; <br />}<br />
    

  • Eddy58Eddy58 Membre
    09:29 modifié #3
    Tes valueFor... renvoyant des NSNumber (normalement), je mettrais plutôt ça : ;)
    <br />-(NSNumber*)nombreActuel<br />{<br />        return [NSNumber numberWithInt:[[self valueForKey:@&quot;nombreInitial&quot;] intValue]-[[self valueForKeyPath:@&quot;nomdelarelationship.@count&quot;] intValue]]; <br />}<br />
    

  • cargocargo Membre
    09:29 modifié #4
    Ok donc si je comprends bien NSNumber est un objet, une instance de classe qui équivaut à  une valeur et on ne peux que faire des opérations mathématiques sur des objets "nombres" de type id, c'est ça ?  (Merci en tous cas...)
  • Eddy58Eddy58 Membre
    09:29 modifié #5
    NSNumber est une sous-classe de NSValue, dont le but est de mettre des valeurs sous formes d'objets afin de pouvoir les inclure dans des objets de type collection (NSArray,NSSet).
    Par contre, je ne cerne pas trop ce que tu entends par "et on ne peux que faire des opérations mathématiques sur des objets "nombres" de type id", mais si tu parles des opérateurs genre "@count";, ça fait parti de la mécanique des bindings, donc tu as une couche logicielle qui fait tout le boulot.
    Là  tu redescend un niveau au-dessous donc c'est à  toi de faire ta propre mécanique. :)
  • cargocargo Membre
    09:29 modifié #6
    Oui oui ben voilà  c'est ce que j'avais compris même si je l'explique avec mes mots à  moi !... :)
    > On utilise des opérateurs mathématiques (+ - x / ) dans le code uniquement avec des nombres pas avec des objets.
  • cargocargo Membre
    09:29 modifié #7
    CA MAAAAAAAARCHE !!!!!
    :adios!: <3 :adios!: <3 :adios!: <3 :adios!: <3 :adios!: <3 :adios!: <3 :adios!:
  • cargocargo Membre
    mars 2006 modifié #8
    le calcul d'un pourcentage maintenant...
    <br />-(NSNumber*)nombreFinal<br />{<br />	return [NSNumber numberWithDouble:[[self valueForKey:@&quot;nombreInitial&quot;] doubleValue]+[[self valueForKey:@&quot;nombreInitial&quot;] doubleValue]*[[self valueForKey:@&quot;pourcentage&quot;] doubleValue]/100]; <br />}<br />
    


    j'essaye...ma question est "est-ce que la priorité des opérations est respectée ?" , c'est à  dire faire la multiplication et la division avant l'addition?
  • Eddy58Eddy58 Membre
    09:29 modifié #9
    Oui, les prioritées sont celles du C : *  /  + -
  • 09:29 modifié #10
    Sinon si tu hésites, rien ne t'empeche de faire [tt]NSLog(@%i,2+2*2);[/tt] et si 6 s'affiche c'est bon...
  • cargocargo Membre
    09:29 modifié #11
    >Renaud : ça dépasse mes compétences... :)

    De toutes façons c'est bon ça marche, mon problème maintenant c'est que cette valeur soit calculée une fois pour toutes et pas automatiquement mise à  jour, j'ai posté dans débutants à  propos de ça (c'est plus ma place là  bas d'ailleurs je me demande ce que je fais ici... ::))
Connectez-vous ou Inscrivez-vous pour répondre.