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

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

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

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

Есть указатели?

1 ответ

Решение

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