2010-06-26 5 views
0

J'ai une classe qui exécute la méthode suivante (un getter):Aide avec une méthode qui retourne une valeur en exécutant la méthode d'un autre objet

// the interface 
@interface MyClass : NSObject{ 
    NSNumber *myFloatValue; 
} 

- (double)myFloatValue; 
- (void)setMyFloatValue:(float)floatInput; 

@end 

// the implementation 
@implementation 
- (MyClass *)init{ 
    if (self = [super init]){ 
     myFloatValue = [[NSNumber alloc] initWithFloat:3.14]; 
    } 
    return self; 
} 

// I understand that NSNumbers are non-mutable objects and can't be 
// used like variables.  
// Hence I decided to make make the getter's implementation like this 
- (double)myFloatValue{ 
    return [myFloatValue floatValue]; 
} 
- (void)setMyFloatValue:(float)floatInput{ 
    if ([self myFloatValue] != floatInput){ 
     [myFloatValue release]; 
     myFloatValue = [[NSNumber alloc] initWithFloat:floatInput; 
    } 

@end 

Quand je souris sur l'objet myFloatValue pendant le débogage, il n'a pas contenir une valeur. Au lieu de cela, il est dit: "hors de portée".

Je voudrais être en mesure de faire ce travail sans utiliser @property, en utilisant autre chose que NSNumbers, ou d'autres changements majeurs puisque je veux juste comprendre les concepts en premier. Plus important encore, j'aimerais savoir quelle erreur j'ai apparemment faite.

Répondre

0

Je peux voir quelques erreurs:

La ligne @implementation devrait lire @implementation MyClass

La fonction setMyFloatValue manque une fermeture ] et } -il faut lire:

- (void)setMyFloatValue:(float)floatInput{ 
    if ([self myFloatValue] != floatInput){ 
     [myFloatValue release]; 
     myFloatValue = [[NSNumber alloc] initWithFloat:floatInput]; 
    } 
} 

Je Je viens de le tester dans Xcode et cela fonctionne pour moi avec ces changements.

0

Pourquoi ne pas simplement définir la propriété dans l'interface et synthétiser les accesseurs dans l'implémentation?

@interface MyClass : NSObject { 
    float *myFloat 
} 

@property (assign) float myFloat; 

@end 

@implementation MyClass 

@synthesize myFloat; 

@end 
Questions connexes