2010-10-28 85 views
3

我是iphone開發新手。我有一個問題。我想在NSString中轉換一個NSTimeInterval值,但是在這裏沒有成功。請快速查看下面的代碼。將NSTimeInterval持續時間轉換爲NSString

在.H

NSTimeInterval startTime; 
NSTimeInterval stopTime; 
NSTimeInterval duration; 

在.M

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]; 

,但它不工作就顯示錯誤: 'stringFromDate:'的參數1的不兼容類型:

如果我評論該行,它會在控制檯窗口中顯示正確的持續時間。

感謝您的任何幫助。

回答

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

謝謝大家,快速回復。通過你的建議我明白,我要通過一個不同的參數類型。現在它的工作很好。 再次感謝弗拉基米爾,託羅和傑里米。 – 2010-10-29 09:35:39

+0

真的很酷,你指出NSTimeInterval是雙倍的,我需要的時間以毫秒爲單位,所以我只乘以1000,解決了我的問題。 – Khattab 2012-05-24 18:42:57

3

NSTimeInterval實際上是一個雙,所以將其轉換爲一個字符串,你應該只使用

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

謝謝,這真的是我想要的,我已經解決了我的問題。 – 2010-10-30 06:27:47

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

這個持續時間不類的NSDate,所以它不能用這種方法命名轉換stringFromDate。正如弗拉基米爾所說,NSTimeInterval是雙倍的,用他的方法你可以得到正確的NSString。

相關問題