1

在我的 .h 界面中:

@property (nonatomic, strong) UIView *myView;

在我的 .m 中:

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

为什么会出错?

4

3 回答 3

4

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

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

在这种情况下,您必须声明自己的 ivar。只需在 .m 中执行此操作:

@implementation MyClass {
    UIView *_myView;
}

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

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

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

    // do other stuff here
}
于 2013-05-07T22:39:11.070 回答
0

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

[self.view addSubview:anotherView];
于 2013-05-07T22:39:08.387 回答
-1

仅仅myView在头文件中声明一个属性并不会创建一个名为_myView. 您需要添加的是以下内容@implementation

@interface ClassName ()
{
    UIView *_myView;
}

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

@synthesize myView = _myView;

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

希望这可以帮助!

于 2013-05-07T22:45:16.237 回答