2010-10-28 2 views
3

Я новичок в разработке iphone. У меня проблема. Я хочу преобразовать значение NSTimeInterval в NSString, но не успех в этом. пожалуйста, посмотрите ниже код.Конвертировать длительность NSTimeInterval в NSString

в .h

NSTimeInterval startTime; 
NSTimeInterval stopTime; 
NSTimeInterval duration; 

в ом

startTime = [NSDate timeIntervalSinceReferenceDate]; 
stopTime = [NSDate timeIntervalSinceReferenceDate]; 

duration = stopTime-startTime; 

NSLog(@"Duration is %@",[NSDate dateWithTimeIntervalSinceReferenceDate: duration]); 
NSLog(@"Duration is %@", [NSString stringWithFormat:@"%f", duration]); 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

NSString *time = [dateFormatter stringFromDate:duration];----> Error 
[dateFormatter release]; 

И на одной этикетке установить эту строку ----

[timeLabel setText:time]; 

, но он не работает это показывает ошибку: несовместимый тип для аргумента 1 строки 'stringFromDate:'

, и если я прокомментирую эту строку, она показывает правильную продолжительность в окне консоли.

благодарит за любую помощь.

ответ

8

От NSDateFormatter class reference:

- (NSString *)stringFromDate:(NSDate *)date 
           ^^^^^^^^ the type of the argument 

Из кода:

NSTimeInterval duration; 
^^^^^^^^^^^^^^ the type of what you are passing. 

Ошибка говорит "несовместимый тип". Как вы думаете, что это значит? Возможно, NSTimeInterval несовместим с NSDate *. Вот что документы говорят о NSTimeInterval:

typedef double NSTimeInterval; 

NSTimeInterval is always specified in seconds...

ошибка говорит вам компилятор не может преобразовать NSTimeInterval (который на самом деле является двойной) в указатель на NSDate. На самом деле это не удивительно. Поскольку NSTimeInterval действительно является двойным, вы можете легко преобразовать его в строку с помощью спецификатора формата %f.

foo = [NSString stringWithFormat: @"%f", timeInterval]; 
+0

Спасибо всем, за быстрый ответ. по u предложениям я понимаю, что я собираюсь передать другой тип аргумента. Теперь его работа прекрасна. Снова спасибо Владимиру, Торо и Джереми. –

+0

Действительно круто, что вы указали, что NSTimeInterval был двойным, мне нужно время в миллисекундах, поэтому я просто умножил его на 1000 и решил свою проблему. – Khattab

3

NSTimeInterval на самом деле является двойной, так, чтобы преобразовать его в строку, вы должны просто использовать

NSString *time = [NSString stringWithFormat:@"%f", duration]; 
+0

Спасибо, это действительно я хочу, и я решил свою проблему. –

0
NSString *time = [dateFormatter stringFromDate:duration];----> Error 

Эта длительность не класс NSDate, поэтому он не может быть преобразован с помощью этого метода с именем stringFromDate. Как сказал Владимир, NSTimeInterval двойной, с его методом вы можете получить нужный NSString.

Смежные вопросы