我在尝试将简单的float值设置为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,这为什么不起作用? 最佳答案
最简单的解释是[w getCharacter]
不会返回您认为会返回的对象类。只有为其定义了方向的类才能响应该消息。您应该通过为其定义的类显式调用它来进行测试。
您可能没有包含定义方法的标头。
两个可能不相关的问题:self->direction
构造可用于标量值,但最终会围绕整个类的概念运行。在这种情况下,只需使用:'direction = _direction;`,它将直接进行设置。
苹果保留所有以下划线开头的名称以供内部使用。您不应该使用它们,因为Objective-c具有全局名称空间。您可能会意外地使用在框架深处定义的Apple变量。 (这就是为什么框架常量都以NS,CF,CA等开头的原因)