Ошибка компилятора «необходим метод установки» для использования точечного синтаксиса - определитель определен - PullRequest
4 голосов
/ 15 февраля 2012

Я не могу понять, почему мой код получения и установки не работает.В некотором примере кода, который я просматривал:

- (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 никогда не было объявлено.Я (вроде) понимаю, как это работает, поскольку он работает так же, как метод установки / получения, независимо от того, был ли он синтезирован или нет.

Но вот мой код, и я получаю ошибку компилятора, запрашивающую свойство,Я что-то пропустил?

#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

Скриншот этого кода и ошибка в Xcode

1 Ответ

4 голосов
/ 15 февраля 2012

Стандартно вводить первую букву свойства в имени метода метода set. Как правильно вы написали в:

-(void)setSushiTypes:(NSArray *)sushiRolls

То есть setX1: - ожидаемая сигнатура метода.

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