InitWithCoder: non appelé au désarchivage d'un XIB
Flo
Membre
J'ai deux objets instanciés dans un XIB appartenant à deux classes qui implémentent initWithCoder:.
Cependant cette dernière méthode n'est jamais appeléeÂ
J'ai essayé de rajouter <NSCoding> pour chacune des classes, d'écrire les méthodes associées dans les .h ou encore d'implémenter également la méthode encodeWithCoder; mais rien n'y fait.
En plaçant un breakpoint dans les deux méthode initWithCoder: et en mode débug, ces derniers ne sont jamais atteints. (Et je me suis pas fait avoir par "Load symbols lazily"Â )
J'ai fait un "clean all target", j'ai re-synchronisé IB et XCode, toujours rien...
Help ! :-\\
Cependant cette dernière méthode n'est jamais appeléeÂ
J'ai essayé de rajouter <NSCoding> pour chacune des classes, d'écrire les méthodes associées dans les .h ou encore d'implémenter également la méthode encodeWithCoder; mais rien n'y fait.
En plaçant un breakpoint dans les deux méthode initWithCoder: et en mode débug, ces derniers ne sont jamais atteints. (Et je me suis pas fait avoir par "Load symbols lazily"Â )
J'ai fait un "clean all target", j'ai re-synchronisé IB et XCode, toujours rien...
Help ! :-\\
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Les as-tu bien mises dans la bonne classe ? (Il m'arrive quand je fais parfois du refactoring par exemple de renommer mes fichiers mais d'oublier de renommer le nom de mes classes, ou de les changer dans IB, etc)...?
En gros, il y a 3 types d'objets qu'IB reconnait :
- ces propes objets (ceux qu'il fournit via ses palettes),
- les custom views,
- et le reste.
Chaque objet a sa propre méthode d'initialisation :
- les objets de IB : initWithCoder:
- les custom views : initWithFrame:
- le reste : init.
Comme rien n'est dit à propos de ces "deux objets instanciés dans un XIB", je te recommande de faire le test avec les 3 méthodes ci-dessus.
Par exemple, tous mes objets de type contrôleur (qui ne sont que des sous-classes à NSObject) reçoivent un init lors de leur instanciation via le nib.
Tout est bien expliqué dans la doc Apple (point n°2 du paragraphe The Object Loading Process).
Donc un petit coup d'oeil et tu seras fixé.
Mais le plus sûr reste d'utiliser awakeFromNib qui est appelé quelques soit le type d'objet stocké dans le nib.
Je ne savais pas qu'il y avait une distinction suivant le type de l'objet, mea culpa... En tous cas merci pour la rapidité et l'efficacité de votre aide à tous les deux !