Iphone Setter-Getter-oddness@property
我在尝试将一个简单的浮点值设置为1时遇到了一个非常奇怪的问题 我的财产:Iphone Setter-Getter-oddness@property,iphone,objective-c,properties,setter,Iphone,Objective C,Properties,Setter,我在尝试将一个简单的浮点值设置为1时遇到了一个非常奇怪的问题 我的财产: { float direction; } @property(nonatomic)float direction; 这是合成的: @synthesize direction; 然后我使用了以下代码: - (void)setDirection:(float)_direction { NSLog(@"Setter called with value of %f",_direction); self->
{
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
),我会“被以前的错误弄糊涂了,退出”
这就是奇怪的开始。当我尝试更改该值时,调试消息显示
\u direction=0.00000
。后来我查这个数字时,还是0.000。我显然想把它改为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;
}
赋值应该有效(它刚才对我有效)最简单的解释是
[w getCharacter]
不会返回您认为它会返回的对象类。只有为其定义了方向的类才能响应消息。您应该通过使用它定义的类显式调用它来测试这一点
您可能没有包含定义方法的标题
两个可能无关的问题:
self->direction
构造将适用于标量值,但它会围绕整个类概念进行结束运行。在这种情况下,只需使用:'direction=\u direction;`并直接设置它
Apple保留所有以下划线开头的名称供其内部使用。您不应该使用它们,因为Objective-c有一个全局名称空间。您可能会意外地使用在框架中深层定义的Apple变量。(这就是为什么框架常量都以NS、CF、CA等开头。)luke没有递归循环。他的setter使用的“self->direction”已经与“direction”相同,而与错误的“self.direction”不同。如果我切换到点符号([w getCharacter].direction),我会“被以前的错误弄糊涂,退出”.是什么促使我去研究这个问题。它为我编译,但正如我预期的那样。嘿,刚刚尝试切换到justin说的,仍然是同一个问题。如果它是递归的,日志难道不会直接记录下来吗?我知道应该在哪里查找问题吗?很奇怪,因为正在调用该方法,我的意思是setDirection。我从日志中知道这一点消息。但是为什么参数会变的?如果它有帮助,我的ObjuleC代码都被编译成C++(.mm文件扩展名)。谢谢帮助。嗯,我的答案是非常愚蠢的,应该被忽略。(好吧,这是真的;这与你的问题无关。我会删除它,但我认为我不被允许。在你的帖子被重新格式化之前,我读错了。没问题。非常感谢你的回复。它提出了一个关于循环的非常有趣的观点。从来没有想过。这一点也不愚蠢。你把你的帖子的标题包括在内了吗玩家类?不,谢谢,这就是问题所在。谢谢。我从来没有意识到缺少标题会让这些奇怪的东西变得奇怪。我觉得很傻,这是一个如此简单的修复。非常感谢,这解决了它。这是标题的东西。我没有包括任何我需要的标题。我没有意识到这个错误可能是因为缺少标题。我只是假设有另一个奇怪的现象正在发生。至于方向。这是一个我希望永远不会与之斗争的虫子。再次感谢你最小限度地拔出头发。