2010-06-18 11 views
4

Je suis en train de déboguer un exemple de fragment de tutoriel et je suis confus au sujet du remplacement des paramètres.Les paramètres de substitution ne sont pas appelés dans Objective-C

Je déclare et passer outre comme indiqué ici:

// 
// PolygonShape.h 
// 

@interface PolygonShape : NSObject 
{ 
    int numberOfSides; 

} 

@property int numberOfSides; 


// 
// PolygonShape.m 
// 

@synthesize numberOfSides; 
// custom setter. 
- (void) setnumberOfSides:(int) i 
{ 
    if ((i > minimumNumberOfSides) && (i <= maximumNumberOfSides)) 
     numberOfSides = i; 
    else 
     NSLog (@"Number of sides outside limits:\n You entered %d, limits are min.:%d, max.:%d", 
       i, minimumNumberOfSides+1, maximumNumberOfSides); 
} 


// 
// main.m 
// 

poly = [[PolygonShape alloc] init]; 

poly.numberOfSides = 2; 

[poly setnumberOfSides:2]; 

Donc, ma pensée supposée ici est que, depuis que je « override » le poseur synthétisé pour numberOfSides, puis poly.numberOfSides = 2; aurais appelé ma fonction (void) setnumberOfSides:(int) i. Mais à la place, la seule façon dont cette fonction est appelée est quand je le fais explicitement [poly setnumberOfSides:2];

Je ne comprends pas. Quel est le point de passer outre alors?

Ou plus probablement, qu'est-ce que je fais mal? ;)

Répondre

13

Il est incorrectement capitalisé et la capitalisation est importante. Il devrait être setNumberOfSides:.

+0

Les noms de méthode sont sensibles à la casse. –

+0

Donc, même si ma variable est 'numberOfSides', (small 'n' pour "number"), la fonction de synthèse * la transforme en un 'N' majuscule pour son propre usage. agréable. :/ –

+7

Non, le @synthesize change le cas pour être exactement en ligne avec la règle de camel qui est cohérente dans l'ensemble de Cocoa. 'setnumberOfSides:' n'a jamais eu de sens. – bbum