Problemes de débutant ...
ldfa
Membre
Bonjour à tous ...
J'ai pas réussi à donner un nom à mes 2 problèmes ....
J'ai joint un projet mettant en évidence mes problèmes, c'est plus simple que de longues explications.
Dans les traces de mon application:
- j'affiche l'adresse de ma sous-class d'une NSImageView, et dans mon 'controleur' j'affiche l'adresse de l'outlet.
Je n'obtiens pas la même adresse, ce qui me dérange un peu ...
-j'affiche une variable d'instance de MyImageView qui est initialisée pendant 'initWithFrame' mais je n'arrive pas à récupérer cette valeur par mes 'accessor methode'
Un dernier problème, je comprends pas pourquoi il faut que j'instantiate' dans IB ma sous classe pour que la méthode 'initWithFrame' soit appelé ....
Bon voila, et merci pour les éclaircissements dont j'ai grand besoin ....
[Fichier joint supprimé par l'administrateur]
J'ai pas réussi à donner un nom à mes 2 problèmes ....
J'ai joint un projet mettant en évidence mes problèmes, c'est plus simple que de longues explications.
Dans les traces de mon application:
- j'affiche l'adresse de ma sous-class d'une NSImageView, et dans mon 'controleur' j'affiche l'adresse de l'outlet.
Je n'obtiens pas la même adresse, ce qui me dérange un peu ...
-j'affiche une variable d'instance de MyImageView qui est initialisée pendant 'initWithFrame' mais je n'arrive pas à récupérer cette valeur par mes 'accessor methode'
Un dernier problème, je comprends pas pourquoi il faut que j'instantiate' dans IB ma sous classe pour que la méthode 'initWithFrame' soit appelé ....
Bon voila, et merci pour les éclaircissements dont j'ai grand besoin ....
[Fichier joint supprimé par l'administrateur]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je répond qu'à cette question car je crois avoir la réponse et j'ai pas le temps dans l'immédiat pour les autres questions...
Donc, une classe doit être instanciée pour existée. Quand tu instancie une classe, tu créer un objet.
Donc ta classe, soit tu l'instancies (allocation + init) à partir d'un de tes objets perso, soit dans IB ce qui a pour effet d'instancier ta classe automatiquement au désarchivage du .nib.
a+
Merci pour ta réponse LeChatNoir.
Mais cela répond à ma question pour une sous classe d'un object non graphique ...
Dans le cas d'une sous classe NSImageView ... mon objet semble exister car il est present dans ma fenetre à l'execution même si je l'instancie pas ....
Mais il y a peut être seulement la palette .... je vais vérifier avec un bouton
Je me réponds à moi même, après vérification avec une sous classe de NSButton, il fonctionne dans la fenêtre même si j'instancie pas ma sous classe .... Bon j'ai seulement un object NSButton et pas un object MyButton.... mais cela m'échape un petit peu.
Partant de là , dans IB, tu peux déjà lui affecter une image.
Si ce comportement simple te convient, alors ça s'arrête là .
Mais si tu veux modifier le comportement de cette ImageView, alors tu vas être obligé de définir une classe à toi qui hérite en principe de NSImageView (comme ça tu hérite de toutes les méthodes et attributs de cette classe).
Et si tu veux que ta sous classe soit utilisée plutot que la classe standard, alors, il te faut l'indiquer à IB.
Pour ça, tu vas dans les propriétés de ta NSImageView sous IB et tu choisis "Custom Class". Là tu choisis ta classe perso (faut faire glisser le .h avant) et l'objet "instanciera" donc ta classe. Ta méthode sera alors appelée (initWithFrame).
Même pas besoin de forcer l'instanciation.
a+
Merci Renaud
Effectivement, si je surcharge mouseDown: instancié ou pas, elle est appelée. Bon cela me rassure, juste initWithFrame: qui n'est pas appelé dans ce cas !!!!
Ou trouver des infos sur le sujet, car cela me semble pas intuitif ....
Si quelqu'un à des idée pour mes autres problèmes
Bon finalement c'était la source de l'ensemble de mes problèmes ....
J'avais donc 2 objects MyImageView ... un dans ma fenetre dont l'initWithCoder: est appelée et un autre caché je ne sais ou dont initWithFrame: est appelé....
Donc si quelqu'un à un lien à me fournir pour approfondir cela merci
En fait, tu avais :
* une instanciation de ta classe que tu as dû faire dans IB (classe-> instanciate)
* une NSImageView que tu as glissée dans ta fenêtre et pour laquelle tu as indiqué ta classe comme "custom classe".
Du coup, au chargement du .nib, il instancie 2 fois ta classe.
On le voit bien dans le panel de IB en format liste.
Par contre, ton histoire d'initWithCoder, je comprend pas... Tu as dû modifié ton code depuis ton 1er post car dans le source que j'ai, y a pas d'initWithCoder...
a+
[Fichier joint supprimé par l'administrateur]