2013-07-07 1 views
-1

Я работаю над приложением, в котором я бы назвал метод, и передал параметр NSTimeInterval. Мой метод объявлен как это:Вызов метода с объектом NSTimeInterval сбой

-(void)MethodwithTime:(NSTimeInterval)t 
{ 
    NSLog(@"Test, T = %f", t); 
    ... 
} 

Я называю это из UIViewController, как это:

[myObject performSelector:@selector(MethodwithTime:) withObject:[NSNumber numberWithDouble:t]]; 

Потому что я прочитал, что NSTimeInterval является двойной. Но тест NSLog дает мне некоторые нули ... Тест, T = 0.000000

Как я могу это исправить?

Спасибо!

+1

Почему вы используете 'performSelector:'? Почему бы просто не сделать: '[myObject MethodwithTime: t];'? – rmaddy

+0

Я исправил его и просил выбрать метод выбора формы =) – user2057209

ответ

3

NSTimeInterval не является объектом (это тип typedef для некоторого числа чисел с плавающей запятой, но вы могли бы знать, что если бы вы прочитали его документацию). Следовательно, когда вы пытаетесь интерпретировать указатель (объекты Objective-C представляются) как примитив с плавающей запятой, вы получите неожиданные результаты. Как насчет изменения типа аргумента от MethodwithTime: до NSNumber *?

(О, и имена методов начинаются с буквы в нижнем регистре и использования верблюжьей, так MethodwithName: не идиоматическое, MethodWithName: не является ни хорошим, methodWithName: есть.)

+0

Если изменение аргументов является единственным решением, которое у меня есть, я сделаю это. – user2057209

+0

@ user2057209 Обратите внимание, что тогда ** очевидно ** вам придется изменить способ его регистрации. –

+0

Как я записываю его? – user2057209