简单的Objective-C属性设置错误

时间:2013-05-07 22:32:34

标签: ios objective-c properties setter

在我的.h界面中:

@property (nonatomic, strong) UIView *myView;

在我的.m:

- (void)setMyView:(UIView *)aView {
    _myView = aView; //Use of undeclared identifier "_myView"
}

为什么会出错?

3 个答案:

答案 0 :(得分:4)

我猜你除了明确的“setter”方法外,还为myView属性编写了自己的显式“getter”方法。

当您为属性提供“setter”和“getter”方法时,编译器不会自动为您生成ivar。这是有道理的,因为您的属性实现可能不会使用ivar。

在这种情况下,您必须声明自己的ivar。只需在.m:

中执行此操作
@implementation MyClass {
    UIView *_myView;
}

有了这个,您可以在“setter”和“getter”方法中引用_myView ivar。

另一种可能性是该属性是在父类中声明的,并且您正在覆盖该属性的“setter”方法。在这种情况下,您无法访问ivar。你需要这样做:

- (void)setMyView:(UIView *)aView {
    [super setMyView:aView];

    // do other stuff here
}

答案 1 :(得分:0)

将第二个视图添加为子视图:

[self.view addSubview:anotherView];

答案 2 :(得分:-1)

在头文件中声明属性myView不会创建名为_myView的实例变量。您需要添加的内容如上@implementation

@interface ClassName ()
{
    UIView *_myView;
}

这是一个类扩展,允许您添加实例变量和属性,而不需要知道其他类。然后,如果您还没有,请在@implementation下面添加一个合成行:

@synthesize myView = _myView;

synthesize命令创建链接到_myView实例变量的getter和setter方法。这也允许您实现自定义setter而无需实现getter方法。

希望这有帮助!