Properties : agréger deux properties vers un attribut

narknark Membre
octobre 2009 modifié dans API AppKit #1
Salut à  tous,

Donc, je suis en Core Data, et j'utilise des propriétés.
J'ai un problème assez simple, j'ai trois attributs aType, aValue et aPreview (NSString) accessibles et modifiable dans ma vue.

Je voudrais simplement que la valeur mon troisième attribut soit le résultat du formatage des deux premiers. Un exemple vaut mieux qu'un long discours:

Type : int
Value : myValue
Preview : int myValue;

Je voudrais que la Preview soit updatée de façon transparente à  la modification du type on de la valeur. J'ai vu qu'on pouvait rediriger le getter et le setter d'une propertie, avec un truc du genre:

@property (retain, getter=typeAndValue) NSString *anAttribute;<br /><br />- (NSString *)typeAndValue<br />{<br />	return [NSString stringWithFormat:@&quot;%@%@%@%@&quot;, self.aType, @&quot; &quot;, self.aValue, @&quot;;&quot;];<br />}


Mais après plusieurs tests, je n'ai pas de résultat.
Quelqu'un aurait-il déjà  réussi cette exploit?
Sinon, y a t'il une autre solution pour conserver le comportement des bindings et la simplicité de CoreData; peut-être les valueTransformer?

Réponses

  • Philippe49Philippe49 Membre
    22:26 modifié #2
    Faire une property en read-only en définissant soi-même le getter.
    cf Hillegass chapitres 11 et 30
  • narknark Membre
    22:26 modifié #3
    Hey merci!
    Je teste tout de suite. ;)
  • AliGatorAliGator Membre, Modérateur
    22:26 modifié #4
    Je suis peut-être totalement à  côté de la plaque (car je n'ai fait que traverser en courant le cours CoreData, n'ayant pas eu plus de temps que ça de m'y mettre, et n'ayant pas regardé dans la doc pour ce problème particulier), mais ce n'est pas à  ça qu servent les attributs "transcient" de CoreData ?
  • narknark Membre
    22:26 modifié #5
    Hmm, il me semble que transcient sert à  spécifier que ton type d'attribut est indéfini. Il sert essentiellement à  définir des types objet. Mais peut-être que je dis une ânerie.

    Grand merci, le read-only avec la définition du getter marche très bien.
  • Philippe49Philippe49 Membre
    octobre 2009 modifié #6
    "transient property" signifie que la valeur n'est pas stockée dans le persistent store, tout en étant enregistrée pour fonctionner avec le Undo et le Redo.
    On peut ainsi mettre la property en mode transient dans le xcdatamodel, pour avoir un modèle complet.

    Pour assurer les mises à  jour lors d'un changement de aType ou aValue, il faut également implémenter la méthode

    + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
    

  • narknark Membre
    22:26 modifié #7
    Merci sur la précision avec transient.

    Oui, j'ai du implémenté ça, comme le dit Hillegass. ;)
Connectez-vous ou Inscrivez-vous pour répondre.