我不明白为什么我的 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
最佳答案
设置方法名称中属性的首字母大写是标准做法。正如您正确地拥有:
-(void)setSushiTypes:(NSArray *)sushiRolls
所以 setX1:
是预期的方法签名。
-(void)setX1:(NSNumber *)x1;
关于objective-c - 使用点语法的编译器错误 "setter method needed"-- setter 已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288592/