Setter Getter奇特@property

时间:2010-01-25 22:21:36

标签: iphone objective-c properties setter

尝试将简单浮点值设置为1时,我遇到了一个非常奇怪的问题。

我的财产:

{
float direction;
}
@property(nonatomic)float direction;

合成:

@synthesize direction;

然后我使用了以下代码:

- (void)setDirection:(float)_direction {
    NSLog(@"Setter called with value of %f",_direction);
    self->direction = _direction;
}

出于测试目的......

当我尝试用此更改值时,

[[w getCharacter] setDirection:1.0f];

[w getCharacter]给出了这个:

return [[[self scene] gameLayer] player];

我收到警告,“setDirection未定义。”

如果我切换到点符号([w getCharacter].direction),我会“被先前的错误弄糊涂,拯救”。

这是奇怪的开始。当我尝试更改值时,调试消息显示_direction = 0.00000。当我稍后检查数字时,它仍然是0.000。我显然试图将其改为1,为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

[注意:在评论中,作者说要忽略这个答案。

self.direction = 1;是

的语法糖
[self setDirection: 1];

致电

   -(void)setDirection:(float)_newDirection {
       self.direction = _newDirection;
}

您似乎在告诉编译器或预处理器为您设置递归循环。预处理器(我认为)将其更改为:

-(void)setDirection:(float)_newDirection {
       [self setDirection: _newDirection];
 }

如果你只是打电话

    -(void)setDirection:(float)_newDirection {
      direction = _newDirection;
}

作业应该有效(这对我来说很有用)

答案 1 :(得分:1)

最简单的解释是[w getCharacter]不返回您认为它所做的对象类。只有为其定义了方向的类才能响应消息。您应该通过使用它定义的类显式调用它来测试它。

您可能没有包含定义方法的标头。

两个可能无关的问题:

self->direction构造将用于标量值,但它会绕整个类概念运行。在这种情况下,只需使用:'direction = _direction;`,它将直接设置它。

Apple保留所有以下划线开头的名称供内部使用。您不应该使用它们,因为Objective-c具有全局名称空间。您可能会意外地使用在框架内深度定义的Apple变量。 (这就是框架常量都以NS,CF,CA等开头的原因。)