Je suis tombé sur un problème étrange aujourd'hui. J'ai créé une sous-classe de UIView et ajouté seulement 1 méthode au code de modèle fourni par xcode.Sous-classement et diffusion dans l'objectif C
@interface FloatView : UIView {
}
- (void)floatTest:(CGFloat)x;
@end
- (void)floatTest:(CGFloat)x {
NSLog(@"float was %f", x);
}
Puis dans mon appDelegate j'avais code comme ceci:
UIView *floatView = [[FloatView alloc] init];
[floatView floatTest:10.0f];
Assez simple, non? Qu'est-ce que cela devrait imprimer? Je pensais que ce serait quelque chose comme "10.0000", mais non, il imprime "0.000000".
Je me suis battu avec cela pendant des heures, en essayant de comprendre ce que je faisais mal, puis je l'ai changé le code dans mon appDelegate à
FloatView *floatView = [[FloatView alloc] init];
[floatView floatTest:10.0f];
Alors seulement, at-il imprimer l'attendu « 10.0000 » . Pourquoi cela est-il ainsi? J'ai déclaré FloatView en tant que sous-classe de UIView, ne devrais-je pas être en mesure d'attribuer un objet FloatView à un pointeur UIView sans problèmes?
Même si floatView a été déclaré pointeur vers un UIView, c'est vraiment un floatView et il devrait être capable de gérer le message floatTest? Suis-je complètement hors de la base ici?
Votre code a généré un avertissement de compilateur, non? Si vous aviez compris pourquoi, vous auriez réglé le problème. – bbum
Cela aurait pu régler le problème, mais je n'aurais probablement pas compris pourquoi il se comportait comme ça. Votre commentaire n'est vraiment pas utile. Mes remerciements à Mehrdad Afshari pour la réponse détaillée. –