Condition sur un boolean et KVC (Core Data)

cargocargo Membre
23:48 modifié dans API AppKit #1
<br />if([[self valueForKey:@&quot;myString&quot;] isEqualToString:@&quot;toto&quot;] &amp;&amp; [self valueForKey:@&quot;myChoice&quot;]==YES)


La première condition sur la string fonctionne mais la deuxième sur le boolean ne marche pas.
J'ai essayé isEqualToString:"@YES"; , isEqualToValue: 1 , etc , etc , rien ne marche.
Impossible de trouver quoi que ce soit dans la doc Apple.
Help...

Réponses

  • 23:48 modifié #2
    Désolé de te décevoir, mais il est possible de trouver quelque chose dans la doc. Tu vas dans le programming topic "Key-Value Coding Programming Guide", et c'est sous le titre "Scalar and Structure Support". Rien d'illogique donc.

    Donc pour te faire un résumé, tous les types qui sont des nombres (float, BOOL, double,....) sont encapsulés dans un NSNumber si tu tentes d'y accéder par KVC. Donc le mieux est de faire [[self valueForKey:@myChoice] boolValue] == YES.
  • cargocargo Membre
    février 2007 modifié #3
    Merci Renaud, ça marche.
    Tu ne me déçois pas, c'est exactement là  que je cherchais dans la doc (entre autres)... Je ne comprenais pas comment je pouvait me servir des accessors ce tableau concrètement.
    En fait j'aurais du dire "Impossible de comprendre comment utiliser la doc"  ;)
    Je sais qu'un bool est encapsulé dans un NSNumber mais quand je faisais isEqualTo: 1 , ça ne marchait pas, c'est ça qui m'a perturbé aussi.
    En fait faut le décapsuler pour y accéder si je comprends bien  :p

    J'ajouterais que le KVC simplifie les choses mais c'est pour moi quelque chose de difficile à  conceptualiser, il doit me manquer une pièce du puzzle. Quelque chose comme "qu'est ce qu'il y avait avant le KVC, qu'est ce que remplace le KVC, comment ferait-on sans le KVC"...
  • février 2007 modifié #4
    Pas obligatoire de le décapsuler, tu peux aussi le comparer directement à  un autre NSNumber (avec la méthode isEqualToNumber:, isEqualTo: est dans les scripting additions, si je me souviens bien, le comparateur "standard" est isEqual:, mais étant plus générique que isEqualToNumber:, il est moins efficient - il commence par vérifier les classes), mais si c'est pour comparer à  une constante, le décapsuler est mieux: isEqualToNumber:[NSNumber numberWithBool:YES] fonctionnera, mais ça a comme contre partie de faire 2 appels de méthode au lieu d'une, plus la création d'un objet autoreleasé, ce qui doit être évité tant que possible.

    dans 1171817632:

    Je sais qu'un bool est encapsulé dans un NSNumber mais quand je faisais isEqualTo: 1 , ça ne marchait pas, c'est ça qui m'a perturbé aussi.

    Leçon n°1 de "comment se servir de la doc": regarder les types d'arguments. Cette méthode prend comme argument un id et non un int, ce qui veut dire que tu dois fournir un objet et rien d'autre. Dans le cas présent tu dois fournir un objet qui encapsule un int, donc NSNumber est le choix qui s'impose.

    dans 1171817632:

    J'ajouterais que le KVC simplifie les choses mais c'est pour moi quelque chose de difficile à  conceptualiser, il doit me manquer une pièce du puzzle. Quelque chose comme "qu'est ce qu'il y avait avant le KVC, qu'est ce que remplace le KVC, comment ferait-on sans le KVC"...

    Si je me souviens bien, tu as commencé direct avec CoreData non? Le problème que tu as là  n'est pas tellement qu'il manque quelque chose dans la doc, mais que la doc suppose un certain ordre d'apprentissage, et que tu as grillé des étapes dans ce schéma. Donc le mieux que tu puisses faire est de revoir ces bases. Comme en plus tu as déjà  une certaine expérience, ça ira beaucoup plus vite que si tu partais de 0, et surtout tu verras tout de suite des applications à  certains concepts qui sembleraient obscurs à  des débutants complets.

    Bon, je te le concède, il est dommage que l'ordre préconisé par la doc est plutôt déterminé par l'ordre d'apparition des différentes technos, plutôt que l'ordre d'apprentissage "logique". Mais même si l'ordre de la doc devait être "remanié", le KVC et tout ce qui en a dérivé ne devrait pas figurer au début.

    Une bonne page pour commencer est:
    http://developer.apple.com/referencelibrary/GettingStarted/GS_Cocoa/index.html
    (tu remarqueras que le KVC n'y est même pas cité)
  • cargocargo Membre
    23:48 modifié #5
    Bon ok c'est plus clair.
    Core Data ça m'aide plutôt moi en fait, cette approche type "base de données" m'est familière.
    Je commence avec une appli Core Data mais j'ai lu toute la doc Apple de base déjà , plus les tutoriaux d'applis basiques chez Apple , Project Omega et ici, plus les threads des forums, plus les mailings lists apple developpers, plus les sites cocoadev et compagnie, etc etc...
    Beaucoup de choses à  mémoriser d'un coup ! Ca mérite d'être re-re-re-relu en fait, au fur et à  mesure que l'on y voit plus clair.
    Autant pour les bindings par exemple ça va, je vois comment fonctionne un NSArray à  la base, comment remplir une tableView sans bindings etc. Mais le KVC, c'est pas limpide.
    En fait la doc explique bien comment fonctionnent les choses, mais elle n'explique pas toujours clairement comment elles sont structurées entre elles, comment elles s'intègrent dans un ensemble, leur génèse, leur raison d'être, etc ...
Connectez-vous ou Inscrivez-vous pour répondre.