проблема передачи параметров в методы - PullRequest
1 голос
/ 19 июля 2010

Я пытаюсь вызвать метод с параметром 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 ]

1 голос
/ 20 июля 2010

Есть ли у вас другие методы, называемые setFaceDirection:, которые принимают разные типы?

У вас нет предупреждений компилятора?

1 голос
/ 20 февраля 2011

Я столкнулся с той же проблемой при передаче значений с плавающей запятой в методы, которые реализованы только в файлах * .m, но не объявлены в файлах * .h.

Пример:

, если вы используетевызов метода:

  • (void) updateScreen: (float) значение;{...}

убедитесь, что он объявлен в соответствующем файле интерфейса этого класса.и убедитесь, что у вас нет предупреждения типа: «объект может не отвечать - (void) updatedScreen .....» *

Я объявил любую функцию, которая не работала в моем файле интерфейса, иэто сработало отлично.

1 голос
/ 19 июля 2010

Я считаю, что это связано с автоматическим преобразованием типов со стороны компилятора, но кто-то, более осведомленный о Си, должен будет это объяснить. Чтобы устранить проблему, измените тип параметра angle на double.

0 голосов
/ 25 мая 2011

У меня была такая же проблема. В файле HEADER (.h) аргументы были int. Но в IMPLEMENTATION-файле (.m) аргументы были плавающими или двойными.

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

РЕШЕНИЕ может быть: Возможно, вы не объявили метод в заголовке (.h) или просто забыли изменить тип аргументов в заголовке (.h), поэтому реализация метода использует тип аргументов заголовка !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...