iOS可以在setter方法中传递NSArray

时间:2013-09-12 19:42:59

标签: ios setter

我尝试编写自定义setter方法,但我失败并显示错误消息"Type of property 'pValue' does not match type of accessor 'setPValue:'"。数组成功传递但我不明白错误消息。

我的.h文件:

@property (nonatomic, assign) double pValue;

- (double)getInverseCDFValue:(double)p;
- (void)setPValue:(NSArray*)aArray;

我的实施:

@synthesize pValue;

- (void)setPValue:(NSArray *)aArray {

double p = [[aArray objectAtIndex:22]doubleValue];
NSLog(@"p is: %f", p); //the value is written successfully
[self getInverseCDFValue:p]; //just calling another method for calculations

pValue = iCFDValue;
}

它适用于传递单个值,但不适用于数组。这在setter方法中是不允许的?

由于

2 个答案:

答案 0 :(得分:1)

当您综合您的属性时,除非您的属性只读,否则Xcode将为您的属性生成setter和getter。在这种情况下,它将为您创建唯一的getter方法。所以,通过命名约定,假设你有一个属性名称 toto 哪个类型是double,你的setter将是

-(void)setToto:(double d)

但你可以做的是创建另一个方法来设置你的属性。但是,您需要将方法名称更改为其他名称。例如,

-(void)setTotoWithNSArray:(NSArray *)

答案 1 :(得分:1)

您已定义属性pValue,其类型为double。 Objective-C现在期望存在一个访问器和一个getter,其名称为:

- (double)pValue; // Getter
- (void)setPValue:(double)value; // Setter

您可以让Objective-C为您自动生成它们,或者您需要明确地提供它们。

现在,您提供的方法名称相同,但类型不同(NSArray)。类型是不同的,这就是错误消息告诉你的内容:编译器认为该方法是属性的setter,但是你给它的类型错误。它告诉你,因为你违反了期望,所以在键值编码等某些环境中无法正确使用该属性。几乎在所有情况下,你所做的都被认为是一个错误。

您可以将pValue属性设置为只读,我认为这会使警告消失,但仍然会很糟糕,因为类型差异令人困惑。相反,使用数组参数将setter重命名为其他内容:

- (void)setPValueFromArray:(NSArray *)anArray;