我有兩種方法如下。一種方法(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];
}
謝謝,薩米。
哈哈,幾乎相同的答覆,但我喜歡點符號更好。 :-) 旁註:是在主線程上執行定時器嗎?我期望在主線程上執行需求,但對於NSTimer來說這似乎不是必需的。但是如果它在主線程上運行,iOS如何確保它始終被稱爲「及時」?或者,也許它不能保證在第二個想法。 – Krumelur 2011-02-08 16:33:54
現在它甚至不顯示任何內容,而且我得到錯誤NSTextField可能不會響應-setText。另外對不起,我忘了提及這是一個Mac OS X的應用程序沒有和iPhone應用程序,所以標籤是NSTextView的一個實例,而不是UILabel。 – Sami 2011-02-08 18:18:56