lier textfield outlet erreur NSUnknownKeyException
yodark
Membre
Bonjour à tous,
J'ai un petit problème il doit surement être très classique.
J'ai créé un interface avec deux textfield. J'ai ensuite créer un classe controller pour controller la vue. J'ai créer deux variables outlet pour récupérer la valeur du textfield.
IBOutlet UITextField *txtnom;
J'ai lié la vue au controller. Tout va bien sauf quand je tente de de lier les textfields aux variables j'ai une erreur
Comment faire?
J'ai un petit problème il doit surement être très classique.
J'ai créé un interface avec deux textfield. J'ai ensuite créer un classe controller pour controller la vue. J'ai créer deux variables outlet pour récupérer la valeur du textfield.
IBOutlet UITextField *txtnom;
J'ai lié la vue au controller. Tout va bien sauf quand je tente de de lier les textfields aux variables j'ai une erreur
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x44ae90> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key txtnom.
Comment faire?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
par contre j'ai un avertissement que j'avais pas vu et que je comprends pas...
Tu as du donner comme classe UserOptionsController au File's owner, et ta classe UserOptionsController n'a pas de delegate. Ainsi la connection ne peut pas se faire.
D'ailleurs c'est UIApplication qui râle dans le message
[<UIApplication 0x44ae90> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key txtnom.
UIApplication n'est pas compatible avec le KVC pour la clé "txtnom".
C'est-à -dire que tu n'as pas de variable ou d'accesseur pour txtnom pour la classe UIApplication.
Revois les connections dans le nib. J'ai l'impression que tu n'as pas fait ce que tu croyais faire.
Si je regarde l'exemple de la vue FirstView généré automatiquement elle n'est pas lié à un delgate. C'est en fait tab bar qui est lié a la vue qui est lié au delgate.
Il me semblait avoir compris que pour faire marcher une vue il faut la lier au controller ? Il faut faire encore quelque chose d'autre?
C'est le contraire, c'est l'outlet "view" du Controller que l'on met sur la vue.
Je voudrais ajouter une barre d'outils à mon jeu.
J'ai donc fait:
Voici les bindings que j'ai fait:
Donc ensuite j'initialise ou il faut la toolBar:
Mais quand ça passe la dedans j'ai l'erreur suivante:
Je ne comprends pas parce qu'il me semble déjà avoir eu cette erreur mais c'est quand on a oublier de binder quelques choses normalement non?
(rq le terme de bindings est délicat à employer car cela correspond à une technologie bien spécifique sur Cocoa qui n'est pas disponible sur iPhone)
Non je n'ai fait aucun @property. Je me disais (en dormant ) que cela venait peut-être du fait que mon UIToolBar est une UIView que je ne l'ai pas attacher à une UIWindow? Mais en même temps je me dit qu'on doit bien pouvoir faire une UIView avec IB sans l'attaché à quoi que ce soit dans IB et le faire ensuite par code?
[quote author=Philippe49 link=topic=2875.msg34925#msg34925
(rq le terme de bindings est délicat à employer car cela correspond à une technologie bien spécifique sur Cocoa qui n'est pas disponible sur iPhone)
[/quote]
Ah bon? Mais les bindings c'est pas juste le fait de faire les Target-Actions via IB?
statusBarController = [[StatusBarController alloc] initWithNibName:@Status bundle:nil];
Non cela ce sont les connections.
Le binding (ONE to ONE) c'est un mécanisme d'observation entre une variable x d'un objet A et une variable y d'un objet B. Dès que x change, y change automatiquement et vice versa.
Exact! Merci. J'espère m'habituer vite au message d'erreur parce que c'est un peu poster des messages pour rien ça ::)
Ah ok, bas je savais pas du alors ^^. Pourtant c'est pas fautes d'avoir entendu des gens parler de bindings sur le forum
Mais si tu as une UIView dans ton XIB qui est toute seule, reliée à rien du tout, ou que tu as un IBOutlet dessus, mais qu'il n'est pas déclaré en property "retain", alors ta UIView ne sera pas "retain" et donc ne sera pas gardée en mémoire. Il faut absolument que tu aies un IBOutlet dessus et qu'il soit déclaré en property "retain".
La doc Apple à ce sujet