1

我似乎无法将计时器输出设置为 NSTextField。我看过这个Q/A,在许多中,但一定是在做一些不同但错误的事情。

我在 WindowDidLoad 中初始化计时器和文本字段。

我的定时器方法如下:

time += 1;
        if((time % 60) <= 9) {
            NSString *tempString = [NSString stringWithFormat:@"%d:0%d",(time/60),(time%60)];
            [timerTextField setStringValue:tempString];
        } else {
            NSString *tempString = [NSString stringWithFormat:@"%d:%d",(time/60),(time%60)];
            timerTextField.stringValue = tempString;
        }
        NSLog(@"timerTextField: %@", timerTextField.stringValue);

如您所见,我记录了文本字段输出。我有一个从文件所有者到 timerTextField 的 IBOutlet 连接。

我可以在日志中正确看到输出,但未填充文本字段字符串。

谁能看到我做错了什么?谢谢

4

1 回答 1

1

您发布的代码对我来说看起来不错。timerTextField(您可以通过 Cocoa Bindings将您的时间值绑定到时间值来替换它)。

您是如何创建计时器的以及将它添加到哪个运行循环(模式)?另一个问题可能是您的插座timerTextField未连接。您可以在计时器选择器中设置断点并检查是否timerTextField不为零。

更新:

我刚刚尝试了您的代码,对我来说它有效。
假设您有一个名为 timerTextField 的 IBOutlet 连接到 Interface Builder 中的 NSTextField 实例,则此代码每秒更新文本字段:

@interface SSWAppDelegate ()
{
    NSUInteger time;
}

@property (weak) IBOutlet NSTextField *timerTextField;

@end

@implementation SSWAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSTimer* timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}

- (void)updateTime:(id)sender
{
    time += 1;
    if((time % 60) <= 9) {
        NSString *tempString = [NSString stringWithFormat:@"%lu:0%lu",(time/60),(time%60)];
        [self.timerTextField setStringValue:tempString];
    } else {
        NSString *tempString = [NSString stringWithFormat:@"%lu:%lu",(time/60),(time%60)];
        self.timerTextField.stringValue = tempString;
    }
    NSLog(@"timerTextField: %@", self.timerTextField.stringValue);
}

@end
于 2013-10-21T06:37:27.130 回答