我在尝试将一个简单的浮点值设置为 1 时遇到了一个非常奇怪的问题。
我的属性(property):
{
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]
不会返回您认为它返回的对象类。只有为其定义了方向的类才能响应该消息。您应该通过使用它定义的类显式调用它来测试它。
您可能没有包含定义该方法的 header 。
两个可能不相关的问题:
self->direction
构造适用于标量值,但它会围绕整个类概念进行最终运行。在这种情况下,只需使用:'direction=_direction;`,它就会直接设置它。
Apple 保留所有以下划线开头的名称供其内部使用。您不应该使用它们,因为 Objective-c 有一个全局 namespace 。您可能会意外地使用在框架深处定义的 Apple 变量。 (这就是为什么框架常量都以 NS、CF、CA 等开头)
关于iphone - Setter Getter 奇怪@property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136108/