2

我在尝试将简单的浮点值设置为 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,为什么这不起作用?

4

2 回答 2

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;
}

任务应该有效(刚才对我有用)

于 2010-01-25T22:39:57.420 回答
1

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

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

两个可能不相关的问题:

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

Apple 保留所有以下划线开头的名称供其内部使用。你不应该使用它们,因为 Objective-c 有一个全局命名空间。您可能会不小心使用在框架深处定义的 Apple 变量。(这就是为什么框架常量都以 NS、CF、CA 等开头的原因。)

于 2010-01-26T02:30:05.270 回答