Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Setter-Getter-oddness@property_Iphone_Objective C_Properties_Setter - Fatal编程技术网

Iphone Setter-Getter-oddness@property

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

我在尝试将一个简单的浮点值设置为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
),我会“被以前的错误弄糊涂了,退出”


这就是奇怪的开始。当我尝试更改该值时,调试消息显示
\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文件扩展名)。谢谢帮助。嗯,我的答案是非常愚蠢的,应该被忽略。(好吧,这是真的;这与你的问题无关。我会删除它,但我认为我不被允许。在你的帖子被重新格式化之前,我读错了。没问题。非常感谢你的回复。它提出了一个关于循环的非常有趣的观点。从来没有想过。这一点也不愚蠢。你把你的帖子的标题包括在内了吗玩家类?不,谢谢,这就是问题所在。谢谢。我从来没有意识到缺少标题会让这些奇怪的东西变得奇怪。我觉得很傻,这是一个如此简单的修复。非常感谢,这解决了它。这是标题的东西。我没有包括任何我需要的标题。我没有意识到这个错误可能是因为缺少标题。我只是假设有另一个奇怪的现象正在发生。至于方向。这是一个我希望永远不会与之斗争的虫子。再次感谢你最小限度地拔出头发。