NSView xcode 4-5 et drawRect
JE729
Membre
Bonjour,
Juste une petite question face à une observation simple :
- si je crée une sous classe de NSView depuis Xcode 4, la méthode - drawRect: est déjà écrite sans appel à la méthode de la classe mère
- alors que depuis Xcode 5, la méthode - drawRect est deja écrite mais avec un appel à la classe mère
En claire :
//Xcode 4
- (void)drawRect:(NSRect)dirtyRect
{
// Drawing code here.
}
//Xcode 5
- (void)drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
// Drawing code here.
}
Que devons nous donc faire ? Modifier toutes mes sous-classes de NSView ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je pense que c'est plus lié au SDK qu'à Xcode5.
Je ne suis plus inscrit au Mac developer program et je ne peux pas vérifier ; je pense que quelque chose a changé dans Mavericks à ce propos.
Il suffit de regarder la doc de -drawRect dans NSView. Jusqu'à 10.8 il est explicitement écrit que cette méthode ne fait rien, donc l'écriture Xcode4 ou Xcode5 ne change rien. En 10.9 je subodore que la méthode de base fait quelque chose, et du coup on devrait trouver des règles de dérivation.
Vu comment fonctionnent les templates de fichier Xcode, tu as un template pour NSView, et il sera utilisé pour quand tu crées des sous-classes de NSView qu'elles soient sous-classe directe ou indirecte, du coup ils ont peut-être mis à jour leur templates juste pour penser au cas quand tu fais une sous-classe d'une sous-classe et pour que ce template prenne ce cas en compte.
(ça me fais penser qu'il faudra que je mette à jour mes templates de fichier perso que je me suis rajoutés à Xcode tiens !)
De toute façon fait juste aller lire la doc de drawRect pour 10.8 et 10.9 pour en avoir le coe“ur net comme indique jpimbert. Après, ça coûte vraiment pas grand chose d'appeler le "super" par précaution et par cohérence.
Je vais donc rajouter des "super" par cohérence comme vous avez dit plus haut.
C'est que lorsque j'ai lu la doc et vu ce que xcode écrivait, ca m'a perturbé. (Mais je pense doc va surement être mis à jour.)