2010-09-23 49 views
2

我想比較timeInterval整數值,所以我嘗試將timeInterval轉換爲整數並進行比較。但我得到一個錯誤「無法轉換爲指針類型」:比較TimeInterval整數的問題

NSTimeInterval timeInterval = [startTime timeIntervalSinceNow]; 
int intSecondsElapsed = [timeInterval intValue]; // Error here !!!! 

if ([counterInt != intSecondsElapsed]) 
{ 
    // Do something here... 
} 

怎麼會這樣做呢?

編輯:包含更多有關執行錯誤的細節。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    //[formatter setDateFormat:@"HH:mm:ss"]; 
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    startTime = [NSDate date]; 
    [formatter release]; 


if ([deviceType isEqualToString:@"iPhone 4"]||[deviceType isEqualToString:@"iPhone Simulator"]) 
    { 
     int intSecondsElapsed = (int)[startTime timeIntervalSinceNow]; 
     if (counterInt != intSecondsElapsed) 
     { 
      counterInt = intSecondsElapsed; 
     } 
    } 
+0

您的代碼中也有語法錯誤。 'if([counterInt == intSecondElapsed])'不應該在它周圍有方括號。此外,你可以簡化這樣的語句:'if(counterInt!= intSecondsElapsed)' – Jasarien 2010-09-23 12:15:30

+0

謝謝,我意識到編譯時。我編輯了我的問題以反映您的更改。 – Stephen 2010-09-23 14:03:58

回答

6

NSTimeInterval被定義爲雙所以如果你想將其轉換爲int你可以簡單的類型轉換

NSTimeInterval timeInterval = [startTime timeIntervalSinceNow]; 
int intSecondsElapsed = (int)timeInterval; 

或者乾脆

int intSecondsElapsed = (int)[startTime timeIntervalSinceNow]; 

編輯:如果您初始化並使用您的startTime變量,然後您需要保留它。 [NSDate date]返回自動釋放的對象,使其在創建範圍外變得無效。爲了讓事情變得更容易與聲明保留屬性的屬性startTime和使用

self.startTime = [NSDate date]; 

創建它,不要忘了釋放它在你的類dealloc方法。

+0

謝謝,這工作。 – Stephen 2010-09-23 12:50:42

+0

弗拉基米爾,你的代碼更改編譯乾淨,但我得到一個'EXE_BAD_ACCESS「,而在線執行'int intSecondsElapsed =(int)[startTime timeIntervalSinceNow];' – Stephen 2010-09-23 14:08:20

+0

是的,解決了它,謝謝 – Stephen 2010-09-23 14:34:12

2

弗拉基米爾說什麼是完全正確的,我只是想補充說,你看到錯誤「無法轉換爲指針類型」的原因是因爲你試圖發送消息intValuetimeInterval,你只能做如果你發送消息的是一個指向將響應它的對象的指針。編譯器試圖將timeInterval作爲指針,但失敗。