在我的 .h 界面中:
@property (nonatomic, strong) UIView *myView;
在我的 .m 中:
- (void)setMyView:(UIView *)aView {
_myView = aView; //Use of undeclared identifier "_myView"
}
为什么会出错?
在我的 .h 界面中:
@property (nonatomic, strong) UIView *myView;
在我的 .m 中:
- (void)setMyView:(UIView *)aView {
_myView = aView; //Use of undeclared identifier "_myView"
}
为什么会出错?
我猜除了显式的“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
}
添加第二个视图作为子视图:
[self.view addSubview:anotherView];
仅仅myView
在头文件中声明一个属性并不会创建一个名为_myView
. 您需要添加的是以下内容@implementation
:
@interface ClassName ()
{
UIView *_myView;
}
这是一个类扩展,允许您在不让其他类知道的情况下添加实例变量和属性。然后,如果您还没有它,请在下面添加一个合成行@implementation
:
@synthesize myView = _myView;
synthesize 命令创建链接到 _myView 实例变量的 getter 和 setter 方法。这也允许您实现自定义设置器,而无需实现 getter 方法。
希望这可以帮助!