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 を介して time 値にバインドすることで置き換えることができます)。

タイマーをどのように作成し、どの runloop(mode) に追加しましたか? 別の問題として、コンセントがtimerTextField接続されていない可能性があります。タイマー セレクターにブレークポイントを設定して、timerTextFieldnil でないかどうかを確認できますか。

アップデート:

私はあなたのコードを試してみましたが、私にとってはうまくいきます。
Interface Builder で NSTextField インスタンスに接続された timerTextField という名前の IBOutlet がある場合、このコードはテキストフィールドを毎秒更新します。

@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 に答える