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

标签 ios objective-c properties setter

在我的.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;
}

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

另一种可能性是,该属性是在父类中声明的,并且您将覆盖该属性的“setter”方法。在这种情况下,您无权访问ivar。您需要这样做:
- (void)setMyView:(UIView *)aView {
    [super setMyView:aView];

    // do other stuff here
}

关于ios - 简单的Objective-C属性设置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16429679/

相关文章:

ios - 更改 UIVisualEffectView 的效果

extjs - 如何以编程方式设置选项卡(按钮)的隐藏属性

c# - 为什么这个 'Label' 是一个字段?

ios - 表格 View 单元格不可选择

objective-c - 在设备上测试 ios 应用程序时遇到问题

ios - AppCode 中的 Xcode 对象类型弹出等效项?

android - iOS 4 上的共享首选项

objective-c - 通过委托(delegate)调用时无法识别协议(protocol)方法

swift - 我们可以将 willSet 和 didSet 与 getter 和 setter 一起使用吗?

ios - 为什么 UITextView/UITextField 无法在 iOS 上实现 UITextInput