NSProgressIndicator в NSMenuItem не обновляется на втором дисплее
у меня естьNSMenu
прикреплен кNSStatusItem
(приложение строки меню). При загрузке файла я хочу отобразить NSProgressIndicator в пункте этого меню. Я создалNSViewController
подкласс для этого индикатора прогресса со следующими свойствами:
@property NSUInteger current; // Bound to NSProgressIndicator value
@property NSString *status; // Bound to a NSTextField value
@property NSUInteger total; // Bound to NSProgressIndicator max value
При необходимости я начинаю загрузку файла со следующего кода, который запускается вNSRunLoopCommonModes
так что методы делегата также вызываются, когдаNSMenu
отображается (который работает вNSEventTrackingRunLoopMode
):
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
[connection start];
вdidReceiveData
Метод делегата я затем установить свойства на моемNSViewController
подкласс:
progressViewController.current = receivedData.length;
progressViewController.status = @"Downloading...";
progressViewController.total = expectedBytes;
Это прекрасно работает, если я связываю свойства с меткой, ноNSProgressIndicator
только обновления, если я открою менюдо соединение установлено, и не закрывайте его снова, пока загрузка не закончится. Но если я открою его позже, индикатор прогресса не обновится. Он показывает значение, которое свойства имели в момент, когда я открыл меню, но это значение не обновляется. Индикатор прогресса тоже не анимируется. Обратите внимание, что этикеткиделать Работа...
Я пытался вручную позвонитьsetNeedsDisplay
сYES
и позвонитьdisplay
ом и на пользовательском представлении, и на индикаторе прогресса, когда я изменяю значения, но это не работает. Единственное, что исправляет индикатор прогресса - это[progress setHidden:YES]; [progress setHidden:NO];
в быстрой последовательности, но это вызывает мерцание индикатора прогресса и, конечно, является плохим решением.
Что я делаю неправильно? Как я могу это исправитьNSProgressIndicator
?