我有两种方法如下。一种方法(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