objective-c - 使用点语法的编译器错误 "setter method needed"-- setter 已定义

标签 objective-c cocoa properties compiler-errors getter-setter

我不明白为什么我的 getter 和 setter 代码不起作用。在一些示例代码中,我正在查看:

- (NSArray *)sushiTypes {
  return _sushiRolls;
}

- (void)setSushiTypes:(NSArray *)sushiRolls {
  [sushiRolls retain];
  [_sushiRolls release];
  _sushiRolls = sushiRolls;
}

然后在:

- (void)viewDidLoad {
  [super viewDidLoad];
  self.sushiTypes = [[NSArray alloc]initWithObjects:@"...]autorelease];
}

一直以来,这都是有效的,但是从未声明过 sushiTypes 的属性。我(有点)明白它是如何工作的,因为无论它是否被合成,它的工作方式都与 setter/getter 相同。

但是这是我的代码,我遇到了一个要求属性的编译器错误。我错过了什么吗?

#import <Foundation/Foundation.h>

@interface Temp0 : NSObject {
    NSNumber *x1;
}

-(NSNumber *)x1;
-(void)setx1:(NSNumber *)x;

@end

//
#import "Temp0.h"

@implementation Temp0

-(NSNumber *)x1 {
    return x1;
}

-(void)setx1:(NSNumber *)x {
    [x retain];
    [x1 release];
    x1 = x;
}

-(id)init 
{
    self.x1 = [[NSNumber alloc]initWithInt:1];    // Error on this line:
    // Setter method is needed to assign to object using property assignment syntax
    [super init];
}

@end

Screenshot of this code and the error in Xcode

最佳答案

设置方法名称中属性的首字母大写是标准做法。正如您正确地拥有:

-(void)setSushiTypes:(NSArray *)sushiRolls

所以 setX1: 是预期的方法签名。

-(void)setX1:(NSNumber *)x1;

关于objective-c - 使用点语法的编译器错误 "setter method needed"-- setter 已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288592/

相关文章:

cocoa - 如何使用 Swift 在 Cocoa 中添加 Command-Q 逻辑?

objective-c - 作为 NSComboBox 数据源的目录名称数组

iphone - 核心数据迁移非常慢,为什么会发生这种情况?

ios - @synthesize 语法,带和不带等号

python - 使用 py.test 在类属性上使用 doctest

ios - Objective c 如何从布局内的相机检测对象?

ios - -[WelcomeUI _setViewDelegate :]: unrecognized selector sent to instance 0xc061110

objective-c - AdMob 使应用程序崩溃 xcode iPhone

objective-c - 如何使用 NSCoding 存储 NSUInteger?

c# - 为什么我在尝试将公共(public)方法的默认值设置为颜色时收到错误消息?