Подтвердить что ты не робот

Обновить NSMenuItem, пока отображается меню хоста

У меня есть NSMenuItem, который мне нужно обновить, чтобы показать прогресс (например, Time machine делает с ним резервное копирование). Проблема в том, что когда я устанавливаю новый title на этом NSMenuItem, а title не изменяется.

Это действительно меняется, когда я закрываю и снова открываю меню, но я хочу обновить его, пока пользователь смотрит на него.

Я также попытался удалить элемент и повторно вставить его без результата.

Любые указатели?

4b9b3361

Ответ 1

Это действительно работает без дополнительных усилий, если ваш код обновления работает в режиме run loop, который используется во время отслеживания меню. Это 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];
}