我尝试使用float参数调用方法,但方法得到的值不是我发送的值。
以下是调用的代码(实际调用是最后一行的最后一部分,[child setFaceDirection:direcao];):
direcao = dirRadianos * 180 / M_PI; // direcao = The value I send
NSLog(@"Value Sent: %f", direcao); // Log what I'm sending
for (CCNode *child in super.children) if([child respondsToSelector: @selector(setFaceDirection:)]) [child setFaceDirection: direcao];
以下是方法的代码:
-(void) setFaceDirection: (float) angle {
NSLog(@"Value Recieved: %f", angle);
[theSprite setRotation: - angle ];
}
这是float变量direcao
的声明@interface PersControlNode : CCNode <CCTargetedTouchDelegate> {
// ...
float direcao;
// ...
}
// ...
@end
以下是NSLog的输出:
Value Sent: -16.699266
Value Recieved: 0.000000
Value Sent: -16.699301
Value Recieved: 36893488147419103232.000000
Value Sent: -16.699625
Value Recieved: -0.000000
Value Sent: 48.366463
Value Recieved: 2.000000
Value Sent: 48.366451
Value Recieved: -36893488147419103232.000000
Value Sent: 48.366428
Value Recieved: 0.000000
Value Sent: 48.366444
Value Recieved: -0.000000
Value Sent: 14.036244
Value Recieved: -0.000000
Value Sent: 14.036238
Value Recieved: -2.000000
Value Sent: 14.036201
Value Recieved: -36893488147419103232.000000
Value Sent: 14.036191
Value Recieved: -0.000000
Value Sent: 14.036273
Value Recieved: 36893488147419103232.000000
Value Sent: 12.528809
Value Recieved: 0.000000
Value Sent: 12.528766
Value Recieved: 36893488147419103232.000000
Value Sent: 12.528852
Value Recieved: -2.000000
Value Sent: 12.528863
Value Recieved: 0.000000
Value Sent: -101.309929
Value Recieved: -36893488147419103232.000000
Value Sent: -101.309860
Value Recieved: -2.000000
我做错了什么?我是Objective C的新手。感谢任何想要帮助的人。
PS。如果我使用int而不是float,它会更好用,但即使这样,仍然会有一些错误。
答案 0 :(得分:1)
我认为这与编译器方面的自动类型转换有关,但是对C有更多了解的人必须解释它。要解决此问题,请将angle
参数的类型更改为double
。
答案 1 :(得分:1)
您是否有其他名为setFaceDirection:
的方法采用不同的类型?
您是否有零编译器警告?
答案 2 :(得分:1)
将浮点值传递给仅在* .m文件中实现但未在* .h文件中声明的方法时遇到了同样的问题。
示例:
如果您正在使用调用方法:
确保在该类的相应接口文件中声明它。并确保你没有像下面这样的警告: “对象可能无法响应 - (void)updatedScreen .....”
我声明了在我的界面文件中无法正常工作的任何功能,并且它运行良好。
答案 3 :(得分:0)
我遇到了同样的问题。 在HEADER(.h)文件中,参数为int。 但是在IMPLEMENTATION文件(.m)中,参数是float或double。
@interface ...
{}
- (void) resizeImage:(UIImage *)imageToResize ToFitWidth:(int)max_width andHeight:(int)max_height;
@implementation ...
- (void) resizeImage:(UIImage *)imageToResize ToFitWidth:(float)max_width andHeight:(float)max_height {
NSLog(@"max_width: %f", max_width);
...
值始终为0.000000000。
解决方案可能是: 所以你可能没有在HEADER(.h)中声明方法,或者你只是忘了改变HEADER(.h)中参数的类型,所以方法的实现使用了头的参数类型!