Bindings : value for undefined key

muqaddarmuqaddar Administrateur
07:48 modifié dans API AppKit #1
Salut les louloutes,

J'ai fait le tutorial de CocoaDevCentral sur les bindings ici :
http://cocoadevcentral.com/articles/000080.php

Si j'ai à  peu près compris, en revanche j'ai cette erreur à  la compil :

2004-07-20 10:19:31.797 MailDemo[7707] *** Uncaught exception: <NSUnknownKeyException> [<MyController 0x341df0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key emails.

J'ai revérifié toutes mes connections ds IB au niveau des bindings et je trouve pas la couille du potage.

Réponses

  • nucleusnucleus Membre
    07:48 modifié #2
    Je pense pas que ca soit lié à  IB, mais plutôt au code source..
    Tu as peut-être une faute de frappe dans l'interface?
  • muqaddarmuqaddar Administrateur
    07:48 modifié #3
    Bein le code source , je n'y ai pas touché. C'est celui téléchargé sur le site.
    Compilé avant les bindings, il n'y avait pas d'erreur. Ensuite, ça s'est passé dans IB.
  • ClicCoolClicCool Membre
    07:48 modifié #4
    Salut,
    J'ai jetté un oeil au tuto en question: TRES BIEN

    Il me semble qu'il n'y a que le NSArrayController dénomé emails qui soit bindé avec la clef "emails" (bindé sur l'autre NSArrayController mailboxes)
    Les autres objets n'utilisent jamais cette clef (ou modelKeyPath)

    dans 1090311865:

    2004-07-20 10:19:31.797 MailDemo[7707] *** Uncaught exception: <NSUnknownKeyException> [<MyController 0x341df0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key emails.

    Ce message signifie que le contrôleur se plaint de ne pouvoir trouver d'accesseurs ou propriété pour la clef "emails" sur l'objet cible (bind to) du binding.

    Et donc, en théorie c'est ici le NSArrayController dénommé "emails" qui se plaint, vérifies en les bindings sous I.B.

    Et tiens nous au jus :)
  • muqaddarmuqaddar Administrateur
    07:48 modifié #5
    J'ai vérifié ses bindings.
    Je suis comme dans le tut :
    object class name : Email
    bind to : Mailboxes (l'autre controller)
    controller key : selection
    model key path : email

    Tjs le même message.
  • muqaddarmuqaddar Administrateur
    07:48 modifié #6
    J'ai vu dans le tutorial que controllerAlias (NSObjectController) hérite du content de MyController.
    ça évite de supprimer MyController, c'est ça , et il hérite de tout son contenu ?
  • ClicCoolClicCool Membre
    07:48 modifié #7
    dans 1090327137:

    object class name : Email
    bind to : Mailboxes (l'autre controller)
    controller key : selection
    model key path : email


    C'est pas plutot:
    model key path: emails ? (avec un s)

    tout simplement ? :D
  • ClicCoolClicCool Membre
    07:48 modifié #8
    dans 1090327220:

    J'ai vu dans le tutorial que controllerAlias (NSObjectController) hérite du content de MyController.
    ça évite de supprimer MyController, c'est ça , et il hérite de tout son contenu ?

    Ta question me semble une peu confuse,

    Le NSObjectController dénommé controllerAlias ne sert qu'à  permettre l'accès, par les bindings, a la variable d'instance du MyController: le tableaux  _mailboxes.
    Il pourait servir à  binder sur d'autres variable d'instances également s'il y en avait.

    ça éclaire ta lanterne ? :)
  • muqaddarmuqaddar Administrateur
    07:48 modifié #9
    dans 1090333436:

    dans 1090327137:

    object class name : Email
    bind to : Mailboxes (l'autre controller)
    controller key : selection
    model key path : email


    C'est pas plutot:
    model key path: emails ? (avec un s)

    tout simplement ? :D



    Oui, oui, c'est tout simplement ce que j'avais mis... je me suis planté en recopiant.
  • muqaddarmuqaddar Administrateur
    07:48 modifié #10
    dans 1090334672:

    dans 1090327220:

    J'ai vu dans le tutorial que controllerAlias (NSObjectController) hérite du content de MyController.
    ça évite de supprimer MyController, c'est ça , et il hérite de tout son contenu ?

    Ta question me semble une peu confuse,

    Le NSObjectController dénommé controllerAlias ne sert qu'à  permettre l'accès, par les bindings, a la variable d'instance du MyController: le tableaux  _mailboxes.
    Il pourait servir à  binder sur d'autres variable d'instances également s'il y en avait.

    ça éclaire ta lanterne ? :)



    Oui, un peu. Je vais m'atteler dans pas longtemps à  la création d'une petite appli pour voir si j'ai à  peu près compris.
  • ClicCoolClicCool Membre
    07:48 modifié #11
    dans 1090339652:
    Oui, oui, c'est tout simplement ce que j'avais mis... je me suis planté en recopiant.

    Et comme ça, ça marche maintenant ?
  • muqaddarmuqaddar Administrateur
    07:48 modifié #12
    non, je m'étais planté en tapant sur le forum, mais le "s" y était !
  • ClicCoolClicCool Membre
    07:48 modifié #13
    bonsoir izostar :)

    ouais,
    je m'en doutais un peu car ton message d'erreur citait la clef "emails" avec un s aussi ! :(
    Bon je repose un peu mes cellules grises et je les relance là  dessus après.

    Je suis sûr que c'est tout bête, genre faute de typo ou content du NSObject mal défini, ou encore le NSArrayController des mails boxes mal bindé qui ne renvoie pas de valeur pour emails.

    Jette un eoil sur ton mailboxes controller en attendant ;)

    @+
  • muqaddarmuqaddar Administrateur
    07:48 modifié #14
    Bah je vois pas... j'ai tout vérifié.

    Je joins le projet :

    [Fichier joint supprimé par l'administrateur]
  • ClicCoolClicCool Membre
    07:48 modifié #15
    Bonjour Izostar :)

    Ton projet est bon, mais t'as peut-être mis le doigt sur un bug d'I.B. !! :D
    Je m'explique:

    Au lancement j'ai obtenu 2 messages d'erreurs d'un NSArrayController mais sur la clef "properties" et non email ...
    Saisi d'un doute j'ai voulu identifier quel contrôleur plantait (car ils utilisent tous deux une clef properties)
    Dans I.B., j'ai donc décoché la case "raise for not applicable" du contrôleur email, sauvegardé le nib puis recompilé et exécuté: ça a marché ! :) (c'est un bon truc quand on a plusieurs contrôleur pour identifier le fautif)
    Pour faire la preuve de la culpabilité du contrôleur email j'ai ensuite recoché sa case "raise for not applicable"  et décoché celle du contrôleur mailboxes. Sauvegarde du nib puis compil-exec: ça marche aussi !!! :o
    De retour sous une troisième fois sous I.B. je recoche le "raise for not applicable"  pour les 2 ArrayControllers (donc retour à  l'état initial) et ...
    ... ça marche !!!! ???

    Je suis curieux de savoir si c'est bien un bug d'I.B., regardes de ton coté ... ;)

    P.S. Par contre, je sais pas si c'est normal, mais y'a pas de possibilité de sauvegarde des boites et emails !!??
  • muqaddarmuqaddar Administrateur
    07:48 modifié #16
    Ok, je regarde de mon côté.
    Pour la sauvegarde, c'est normal, c'est juste une appli test...
  • muqaddarmuqaddar Administrateur
    07:48 modifié #17
    Bon, bein j'ai voulu faire comme toi... jusqu'à  qu'IB plante... il ma corrompu mon nib, à  chaque fois que je le lance, IB plante... :-( Joie.
    Bon, c'est pas grave. L'essentiel c'est de comprendre ce qu'on fait.

    Merci cliccool !
  • ClicCoolClicCool Membre
    07:48 modifié #18
    En effet, il est possible que ton nib soit corrompu, en réouvrant la version originale téléchargée hier, j'ai d'emblé un message erreur sous IB
    "2 inconsistencies in the document were found and repaired. Please save the document",
    Si tu veux que je te renvoie les fichiers que tu as perdu, y'a qu'à  demander :)

    Le plus enuyeux c'est que après un comportement bizard de Xcode, voilà  que t'as des soucis avec I.B.
    Peut-être devrais-tu faire un peu le ménage, virer les prefs etc... et au pire, réinstaller les devTools ?
  • muqaddarmuqaddar Administrateur
    07:48 modifié #19
    Hum, pourtant, j'ai tout installé il y a peu !
    Je testerai sur mon autre machine : un PB 15".

    Je veux bien le fichier réparé en attendant stp.
    Merci.
  • ClicCoolClicCool Membre
    07:48 modifié #20
    Salut Izostar,
    je t'ai envoyé le nib réparé.

    P.S. j'ai pas su faire la manip pour le rendre accessible par un lien dans un post ... ???  :-\
  • muqaddarmuqaddar Administrateur
    juillet 2004 modifié #21
    Pour le rendre accessible, il faut le joindre en fichier attaché (ds options supplémentaires) mais en .zip ou .sit.

    C'était donc bien le .nib qui était corrompu !
    Le programme marche maintenant. :-)
    Merci.
Connectez-vous ou Inscrivez-vous pour répondre.