Help : comportement bizarre avec awakeFromNib
Philippe49
Membre
Je sèche sur le comportement suivant de mon programme :
Lorsque j'exécute un certain bloc d'instructions dans awakeFromNib, cela se passe bien.
--> Si je mets ce bloc dans une méthode, et que je l'appelle d'awakeFromNib, cela ne marche plus.
Les paramètres sont des variables de l'instance initialisée dans awakeFromNib (il faut que l'interface soit initialisée pour pouvoir initialiser ces variables).
--> De même, si j'appelle la méthode par l'intermédiaire d'un bouton, j'ai le même échec.
Où chercher ?
Lorsque j'exécute un certain bloc d'instructions dans awakeFromNib, cela se passe bien.
--> Si je mets ce bloc dans une méthode, et que je l'appelle d'awakeFromNib, cela ne marche plus.
Les paramètres sont des variables de l'instance initialisée dans awakeFromNib (il faut que l'interface soit initialisée pour pouvoir initialiser ces variables).
--> De même, si j'appelle la méthode par l'intermédiaire d'un bouton, j'ai le même échec.
Où chercher ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Sans code, je ne vois que dans la boule de cristal !
.
Comme indiqué, cela marche, une belle image se positionne dans le layer.
Si dans la méthode orderImageIn, j'active la ligne [rootLayer setNeedsDisplay] , pas d'image.
Si je désactive dans awakeFromNib, et si j'active applicationDidFinishLaunching, un rectangle blanc et noir à la place de l'image (aux bonnes dimensions)
En désactivant dans awake et applic.. , le clic sur le bouton orderImageIn ne donne aucune image avec setNeedsDisplay, et le double rectangle noir/blanc sans setNeedsDisplay
rq: pour CALayer, il n'y a pas de booléen après setNeedsDisplay
Comme je ne pratique pas encore les CALayer, je n'ai malheureusement pas beaucoup d'aide à t'apporter.
Eventuellement, dans orderImageIn:, ajoute quelques NSLogs pour tester la chaine imagePath-imageData-bitmapImageRep-imageRef.
Tu peux aussi relire la propriété contents du layer pour voir si sa mise à jour a été correctement faite.
Normalement, si un CALayer se comporte peu ou prou comme un NSview, je ne pense pas que le setNeedsDisplay soit nécessaire après la mise à jour de contents (cela doit être fait en interne).
.
La méthode CGImage définissant la CGImageRef crée l'objet en autorelease.
Bien pour moi.
La property contents est avec un attribut retain : @property (retain) id contents
Encore Ok, la CGImageRef reçoit donc un message CGImageRetain
Mais une property avec attribut retain s'occupe-t-elle de faire le release lors du changement.
Ce serait logique (indispensable), mais je ne le vois pas explicitement dans la doc.
Tout simplement en paramétrant le projet pour autoriser l'utilisation de Objective-C garbage Collection
Code simplifié
CGAutorelease est une macro #define CGAutorelease(x) (__typeof(x))[NSMakeCollectable(x) autorelease]
[EDIT] bon, honte sur moi, en mode release, il faut aussi régler ce paramètre, et cela marche.