2010-11-06 14 views
0

dans mon programm, je fait une propriété:Propriétés/Propriété: getter ne fonctionne pas! Objective-C iPhone

@property (nonatomic, retain) IBOutlet UIImageView *block; 
@synthesize block; 

-

si je fais:

NSLog(@"BLOCK = %i", block.center.y); 

Il dit simplement: BLOC = 0

mais mon bloc UIImageView object n'est jamais sur y = 0!

aidez s'il vous plaît!

+0

vous n'utilisez pas le getter de toute façon. Pour utiliser le getter, vous devez utiliser self.block = foo; –

+0

fluchtpunkt: Vous devriez poster une réponse à la question, pas simplement répondre par un commentaire. –

Répondre

2

CGPoint.y est CGFloat, vous devez donc utiliser %f pour l'imprimer.

1

Une propriété et une variable d'instance sont des choses différentes; une propriété représente un état exposé par votre classe, alors qu'une variable d'instance est une façon d'implémenter un état pour votre classe.

Lorsque vous avez écrit block.center.y vous accédiez la variable d'instance nomméeblock, pas invoquer le getter de la propriété. Pour appeler le getter de la propriété, vous devez toujours utiliser soit point ou la syntaxe des messages, tels que:

CGFloat centerY; 

centerY = self.block.center.y; // sends -block getter to self 
centerY = [self block].center.y; // sends -block getter to self 

Voici un exemple où tous ces diffèrent: isEnabled_ est la variable d'instance, enabled est la propriété et -isEnabled est le getter méthode invoquée par la propriété:

@interface View : NSObject { 
@private 
    BOOL isEnabled_; 
} 
@property (getter=isEnabled) BOOL enabled; 
@end 

@implementation View 
@synthesize enabled = isEnabled_; 
@end 

l'attribut getter=isEnabled indique au compilateur de générer -isEnabled messages lors de l'obtention de la propriété enabled. Le @synthesize définit la propriété enabled comme étant soutenue par la variable d'instance isEnabled_.

Vous pouvez donc accéder à la propriété de cette façon:

BOOL shouldDrawView; 

shouldDrawView = someView.enabled; // sends -isEnabled to someView 
shouldDrawView = [someView isEnabled]; // also sends -isEnabled to someView