2011-02-08 167 views
1

我有兩種方法如下。一種方法(timerHit)可以獲得當前播放歌曲的曲目持續時間,從中減去1並在日誌中打印出來,然後再用該值更新標籤。另一種方法(countDown)每秒重複調用timerHit方法,但似乎無法正常工作,因此NSLog語句可以正常工作並重復,因此每秒都會打印該值,但更新標籤語句[duration setDoubleValue:trackDuration];不起作用。誰能幫我?Objective-C NSTimer更新標籤不更新

- (void)countDown { 
    [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerHit:) userInfo:nil repeats:YES]; 
} 

- (void)timerHit:(NSTimer *)p_timer 
{ 
    iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 
    double trackDuration = [[iTunes currentTrack] duration]; 
    if(trackDuration <= 1 && [p_timer isValid]) 
     [p_timer invalidate]; 
    trackDuration--; 
    NSLog(@"%d", trackDuration); 
    [duration setDoubleValue:trackDuration]; 
} 

謝謝,薩米。

回答

0

假設持續時間是NSTextField的一個實例(谷歌搜索之後,這似乎是這種情況 - 我找不到NSLabel是一個現有的對象),試試這個;

[duration setStringValue:[NSString stringWithFormat:@"%d", trackDuration]]; 
+0

哈哈,幾乎相同的答覆,但我喜歡點符號更好。 :-) 旁註:是在主線程上執行定時器嗎?我期望在主線程上執行需求,但對於NSTimer來說這似乎不是必需的。但是如果它在主線程上運行,iOS如何確保它始終被稱爲「及時」?或者,也許它不能保證在第二個想法。 – Krumelur 2011-02-08 16:33:54

+0

現在它甚至不顯示任何內容,而且我得到錯誤NSTextField可能不會響應-setText。另外對不起,我忘了提及這是一個Mac OS X的應用程序沒有和iPhone應用程序,所以標籤是NSTextView的一個實例,而不是UILabel。 – Sami 2011-02-08 18:18:56

0

您需要設置標籤的文本:

duration.text = [NSString stringWithFormat:@"%d", trackDuration]];