objective-c – 使用点语法的编译器错误“需要setter方法” – 定义了setter

前端之家收集整理的这篇文章主要介绍了objective-c – 使用点语法的编译器错误“需要setter方法” – 定义了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];
}

整个过程都有效,但是寿司类型的属性从未被声明过.我(有点)了解它是如何工作的,因为它与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

解决方法

在setter方法名称中大写属性的第一个字母是标准的.正如你所拥有的:

-(void)setSushiTypes:(NSArray *)sushiRolls

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

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

猜你在找的cocoa相关文章