我想从类中访问实例变量,但它似乎不起作用:
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;
}
我对Objective-C很新,所以我可能只是忽略了一些东西。
我知道我可以合成foo,但它会导致同样的错误。
可以在此处下载项目:http://cl.ly/DL4s
答案 0 :(得分:2)
该类别不知道foo
是一个实例变量,因为您已在ClassA
的实现中对其进行了定义。您已将其声明为属性,但所有这些意味着将存在名为foo
和setFoo:
的方法,而不是还有一个名为foo
的实例变量。
您应该将CategoryA
更改为:
@implementation ClassA (CategoryA)
-(void) print
{
NSLog(@"Foo: %i", self.foo);
}
@end
答案 1 :(得分:0)
将变量声明移动到界面中,而不是将其放在实现中:
@interface ClassA: NSObject {
int foo;
}
@property int foo;
-(int) foo;
-(void) setFoo: (int) f;