尝试将简单浮点值设置为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,为什么这不起作用?
答案 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等开头的原因。)