Objective-C NSTimer更新标签不';t更新

Objective-C NSTimer更新标签不';t更新,objective-c,nstimer,Objective C,Nstimer,下面我有两种方法。一种方法(timerHit)获取当前播放歌曲的曲目持续时间,从中减去1,并在日志中打印出来,然后也用该值更新标签。另一种每秒重复的方法(countDown)调用timerHit方法,但是它似乎不能正常工作NSLog语句工作并重复,因此每秒打印一次值,但更新标签语句[duration setDoubleValue:trackDuration]不起作用。有人能帮我吗 - (void)countDown { [NSTimer scheduledTimerWithTimeInt

下面我有两种方法。一种方法(
timerHit
)获取当前播放歌曲的曲目持续时间,从中减去1,并在日志中打印出来,然后也用该值更新标签。另一种每秒重复的方法(
countDown
)调用
timerHit
方法,但是它似乎不能正常工作
NSLog
语句工作并重复,因此每秒打印一次值,但更新标签语句
[duration setDoubleValue:trackDuration]不起作用。有人能帮我吗

- (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 scheduledTimerWithTimeInterval:1.0f目标:自选择器:@selector(timerHit:)用户信息:无重复:是];
}
-(无效)timerHit:(NSTimer*)p_定时器
{
iTunesApplication*iTunes=[SBApplication applicationWithBundleIdentifier:@“com.apple.iTunes”];
双轨持续时间=[[iTunes currentTrack]持续时间];

如果(trackDuration假设duration是NSTextField的一个实例(在谷歌搜索之后,情况似乎是这样的-我找不到NSLabel是一个现有的对象),那么试试这个

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

您需要设置标签的文本:

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

哈哈,几乎相同的回答,但我更喜欢点符号。:-)旁注:计时器是在主线程上执行的吗?我希望要求在主线程上执行,但这似乎不是NSTimer所必需的。但是如果它在主线程上运行,iOS如何确保它总是被称为“及时”?或者也许它只是不能保证在第二个想法。现在它甚至没有显示任何内容,而且我得到错误NSTextField可能没有响应-setText。还有很抱歉,我忘了提到这是一个Mac OS X应用程序不是和iPhone应用程序,所以标签是NSTextView的一个实例,而不是UILabel。
我忘了提到这是一个Mac OS X应用程序不是和iPh一个应用程序,因此标签是NSTextView的实例,而不是UILabel。
啊,这解释了很多。Mac,而不是iOS——所以
-[NSTextField setStringValue:
,而不是
-[UILabel setText: