[object valueForKey: @"key"] retourne une valeur bizarre
Flo
Membre
Bonjour,
j'aurais une petite question (de débutant pour changer 8--)) :
J'ai un objet avec une variable d'instance de type (NSString *).
Quand je fais :
le log m'affiche une adresse au lieu de la NSString désirée, pourquoi ?
Il y aurait-il une conversion de la part de la méthode valueForKey: ? et si oui comment récupérer la chaà®ne correctement sans passer par un getter ?
Merci d'avance pour vos réponses.
j'aurais une petite question (de débutant pour changer 8--)) :
J'ai un objet avec une variable d'instance de type (NSString *).
Quand je fais :
<br /> NSLog(@"%@", [monObject valueForKey: @"maString"]); <br />
le log m'affiche une adresse au lieu de la NSString désirée, pourquoi ?
Il y aurait-il une conversion de la part de la méthode valueForKey: ? et si oui comment récupérer la chaà®ne correctement sans passer par un getter ?
Merci d'avance pour vos réponses.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
À vue de nez ça devrait marcher. N'y aurait-il pas une erreur ailleurs ?
+
Chacha
Les classes qui ne redéfinissent pas la méthode description retournent simplement leur nom et leur adresse mémoire.
teste ça :
Si ça affiche autre chose que NSString, alors y'a un blème.
ça me donne NSCFString, est-ce que le fait que l'objet soit initialisé à partir d'un NSDictionary créé à partir d'un plist y est pour quelque chose ?
Tu devrais nous mettre plus de code et de résultats de Logs, sinon on agit en aveugle.
+
Chacha
En réalité je manipule des noeuds que j'initialisent à partir d'un plist, dans l'initialisation il ya la ligne (DESCRIPTION_KEY est une macro-constante pour l'attribut @description de node) :
j'ai une outlineView qui doit récupérer cet attribut pour chaque noeud via une méthode déléguée à un NSWindowController en faisant un :
et la patatra... mon outlineView représente bien tous les noeuds mais par des chaines vides. Par contre si je remplace le valueForKey par un getter du genre :
et ben la ça marche...
Pour l'instant j'ai juste mis des chaines bidons dans le plist pour chaque description de noeud du style TEST0, TEST1 ....
As-tu vérifié que ton dictionnaire contient bien ce que tu attends ?
NSLog(@%@", aDictionary) sera utile.
Un truc : si tu en as un peu marre de jouer avec les NSLog, ça vaut le coup d'essayer d'utiliser le debugger. Truc basique : tu mets un point d'arrêt (clic dans la marge), et quand le debugger te permet d'inspecter tes variables, tu peux faire "print description to console".
+
Chacha
C'est vrai que je ne l'utilise pas asser souvent celui-la, même si je sais m'en servir...
J'ai avancé dans le problème, j'ai en fait eu l'extrême mauvaise idée (comme le montre les bout de code que j'ai écrit) de choisir le nom de variable description pour le nom du noeud. Hors il se trouve qu'il s'agit d'une clé réservée quand on fait
du coup normal que la méthode classeName: renvoyait NSCFString et que les log étaient incohérents.
mais maintenant quand je fais
ça me met null... certainement un probleme de retain quelque part...
En tous cas ça me rassure je commençais à ne plus rien comprendre avec cette histoire de @description.
En tous cas merci de votre aide à tous les deux.