0

私が理解しているように、セッターとゲッターを介してビューで何かを変更する前に、NSViewController クラスのビューをロードする必要があります。問題は、コントローラのビューがカウントダウンを表示することになっているため、ビュー コントローラ クラスには、stringValue を毎秒変更する NSTimer があることです。しかし、私が見ることができるものから、次のようなものを使用する必要があります:

[instanceOfViewControllerClass view]ビューがロードされてからsetStringValue機能するように、別のクラスで。

以前にも同様の質問をしましたが、答えは上で述べたとおりでした。当時は、ビューを継続的に変更する必要があるとは知りませんでした。

基本的に私が探しているのは、次のように機能するものです。

//ViewControllerClass.m
-(void)startCountdown{
//here I make "invocation" using NSInvocation
[invocation setTarget:self];
[invocation setSelector:@selector(updateCountdown)];
timerLabelUpdater = [NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES];
}

-(void)updateCountdown {
//x would be calculated here by deducting 1 from an original amount of time
[timeLeftLabel setStringValue:@"x"];
}

updateCountdown に NSLog を配置すると、完全にログが記録されます。つまり、実行中です。ラベルを変更することはできません。

上記の回答を使用して、上記のコードのいくつかの場所で[self view]and[self loadView]を使用してみましたが、どちらも違いはありません。

今回探しているものが明確になったことを願っています。どんな助けもいただければ幸いです。

4

1 に答える 1

0

ビューコントローラーをどのように初期化していますか? nib にアーカイブされていますか、それともコードで実行していますか? どのペン先に関連付けられているかを実際に伝えていないと思います。

ペン先の一部である場合は、属性インスペクターで正しいペン先名フィールドを設定する必要があります。

コードでインスタンス化する場合は、ペン先の名前を明示的に伝える必要があります。

init最も簡単な方法は、次のようにオーバーライドすることです。

- (id)init {
    self = [super initWithNibName:@"MyViewController" bundle:nil];
    if (self) {
        // Initialization code here.
    }
    return self;
}
于 2011-12-25T11:27:14.710 に答える