14

進行状況を表示するために更新する必要があるNSMenuItemものがあります(タイムマシンがバックアップで行うように)。問題は、そのtitle上に新しいものを設定してもNSMenuItemtitle変更されないことです。

メニューを閉じて再度開くと実際には変化していますが、ユーザーが見ている間に更新したいと考えています。

また、アイテムを削除して再挿入しようとしましたが、結果はありませんでした。

ポインタはありますか?

4

1 に答える 1

18

これは、更新コードがメニュー トラッキング中に使用される実行ループ モードで実行される場合、追加の作業なしで実際に機能します。これは ですが、メニューがプルダウンされたときにメニュー項目のタイトルが正しくなるようNSEventTrackingRunLoopModeに使用したいだけかもしれません。NSRunLoopCommonModes

fooアプリが起動してからの秒数をカウントするメニュー項目の簡単な例を次に示します。

- (void)doStuff;
{
    static int i = 0;
    [foo setTitle:[NSString stringWithFormat:@"%d", ++i]];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
{
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                                [self methodSignatureForSelector:@selector(doStuff)]];
    [invocation setTarget:self];
    [invocation setSelector:@selector(doStuff)];
    [[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes];
}
于 2011-06-10T02:34:07.127 に答える