我在尝试将简单的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等开头的原因)

09-25 22:27