指定只有getter生成警告b / c没有setter,但setter不会编译

时间:2016-07-22 19:32:55

标签: ios objective-c

我相信这张照片很能描述我的问题。如果我只定义如下的自定义getter

- (UIImage *) secondaryIconImage {   
    if (_secondaryIconImage) return _secondaryIconImage;
    return nil;
}

然后我收到错误:'cannot pair a synthesized setter with a user defined getter'。但是,如果我尝试声明setter,我的代码根本不会编译:

- (void) setSecondaryIconImage:(UIImage *)secondaryIconImageVar {
    _secondaryIconImage = secondaryIconImageVar;
}

特别是这给了我编译时错误'Use of undeclared identifier _secondaryIconImage'

我想也许一旦我宣布了我必须自己合成实例变量的setter,所以我尝试添加:

@synthesize _secondaryIconImage;

这没有帮助。这里发生了什么,我该如何解决?

P.S。我有一个自定义的getter因为我最终需要做一些更好的事情,但我没有看到使这个例子复杂化的理由,因为即使这个基本的例子也给我一个问题。

1 个答案:

答案 0 :(得分:2)

正如它所指出的,你不能在没有setter的情况下定义getter。 (你的吸气剂当然没有意义,所以我认为你的实际吸气剂更复杂?)

如果你定义了getter和setter,那么你就不会合成任何东西(因为你已经写好了所有内容,没有任何东西可以合成),并且不会为你定义任何ivar。如果需要,您需要自己定义它。

您需要通过@synthesize明确请求ivar(感谢Richard Ross让我直截了当):

@synthesize secondaryIconImage = _secondaryIconImage;

您的代码要求提供名为_secondaryIconImage属性,因此ivar将为__secondaryIconImage