在我的.h界面中:
@property (nonatomic, strong) UIView *myView;
在我的.m:
- (void)setMyView:(UIView *)aView {
_myView = aView; //Use of undeclared identifier "_myView"
}
为什么会出错?
答案 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方法。
希望这有帮助!