2012-01-14 1 views
1

Je veux accéder à une variable d'instance d'une classe, mais il ne semble pas fonctionner:acessing variables d'instance à partir d'un résultat de classe dans « L'utilisation de foo variable non déclarée »

ClassA.h:

#import <Foundation/Foundation.h> 

@interface ClassA: NSObject 

@property int foo; 

-(int) foo; 
-(void) setFoo: (int) f; 

@end 

ClassA.m:

#import "ClassA.h" 

@implementation ClassA 
{ 
    int foo; 
} 

-(int) foo 
{ 
    return foo; 
} 

-(void) setFoo: (int) f 
{ 
    foo = f; 
} 

@end 

CategoryA.h:

#import "ClassA.h" 

@interface ClassA (CategoryA) 

-(void) print; 

@end 

CategoryA.m:

#import "CategoryA.h" 

@implementation ClassA (CategoryA) 

-(void) print 
{ 
    NSLog(@"Foo: %i", foo); //Use of undeclared variable 'foo'; did you mean 'for'? 
} 

@end 

main.m

#import <Foundation/Foundation.h> 
#import "ClassA.h" 
#import "CategoryA.h" 

int main (int argc, const char * argv[]) 
{ 

    @autoreleasepool 
    { 
     ClassA *a = [[ClassA alloc] init]; 
     [a setFoo: 10]; 
     [a print]; 
    } 
    return 0; 
} 

Je suis assez nouveau à Objective-C quelque chose de si je pourrais juste avoir négligé. Je sais que je peux simplement synthétiser foo, mais il en résulte la même erreur.

Le projet peut être téléchargé ici: http://cl.ly/DL4s

Répondre

0

Déplacer la déclaration variable dans l'interface plutôt que de le mettre dans la mise en œuvre:

@interface ClassA: NSObject { 
    int foo; 
} 

@property int foo; 

-(int) foo; 
-(void) setFoo: (int) f; 
2

La catégorie ne sait pas que foo est une variable d'instance comme vous l'avez défini dans l'implémentation de ClassA. Vous l'avez déclaré comme une propriété, mais tout ce que cela signifie est qu'il y aura des méthodes appelées foo et setFoo:, pas qu'il existe une variable d'instance appelée foo.

Vous devriez probablement changer CategoryA à ceci:

@implementation ClassA (CategoryA) 

-(void) print 
{ 
    NSLog(@"Foo: %i", self.foo); 
} 

@end 
Questions connexes