将参数传递给方法的问题

时间:2010-07-19 15:12:39

标签: objective-c xcode cocos2d-iphone

我尝试使用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,它会更好用,但即使这样,仍然会有一些错误。

4 个答案:

答案 0 :(得分:1)

我认为这与编译器方面的自动类型转换有关,但是对C有更多了解的人必须解释它。要解决此问题,请将angle参数的类型更改为double

答案 1 :(得分:1)

您是否有其他名为setFaceDirection:的方法采用不同的类型?

您是否有零编译器警告?

答案 2 :(得分:1)

将浮点值传递给仅在* .m文件中实现但未在* .h文件中声明的方法时遇到了同样的问题。

示例:

如果您正在使用调用方法:

  • (void)updateScreen :( float)value; { ... }

确保在该类的相应接口文件中声明它。并确保你没有像下面这样的警告: “对象可能无法响应 - (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)中参数的类型,所以方法的实现使用了头的参数类型!