4 Stimmen

Compiler-Fehler "setter-Methode erforderlich" zur Verwendung der Punktsyntax -- setter ist definiert

Ich kann nicht herausfinden, warum mein Getter- und Setter-Code nicht funktioniert. In einigen Beispiel-Code, den ich ging über:

- (NSArray *)sushiTypes {
  return _sushiRolls;
}

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

Dann in:

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

Das hat die ganze Zeit funktioniert, aber eine Eigenschaft für sushiTypes wurde nie erklärt. Ich verstehe (irgendwie), wie das funktioniert, da es das gleiche wie ein Setter/Getter funktioniert, unabhängig davon, ob es synthetisiert wurde oder nicht.

Aber hier ist mein Code, und ich erhalte einen Compilerfehler, der nach einer Eigenschaft fragt. Habe ich etwas übersehen?

#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 dieses Codes und des Fehlers in Xcode

4voto

NJones Punkte 27049

Es ist Standard, den ersten Buchstaben der Eigenschaft im Namen der Setter-Methode groß zu schreiben. So wie Sie es in korrekt haben:

-(void)setSushiTypes:(NSArray *)sushiRolls

Also setX1: ist die erwartete Methodensignatur.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X