iphone - Setter Getter 奇怪@property

标签 iphone objective-c properties setter

我在尝试将一个简单的浮点值设置为 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/

相关文章:

iphone - 如何修复 xcode(和 ios 5)中的链接错误

iphone - 模拟点击完成按钮

ios - 如何在 ios 中为 UIScrollView 设置对齐方式

objective-c - NSScrollView 在 Cocoa 中底部有空间并且滚动条始终位于底部

ios - 如何在 Xcode 的 AppDelegate.h 中声明接口(interface)?

iphone - CATiledLayer 如何知道何时提供新磁贴?

ios - 在 iOS 中将一个对象变成它的子类

php - Yii2 ActiveFormencodeErrorSummary 属性...它的用途是什么?

c# - 在 UML 类图中表示 C# 访问器属性?

ios - 使用 instantiateViewControllerWithIdentifier 将变量传递给另一个 View Controller