NSProgressIndicator in NSMenuItem wird bei der zweiten Anzeige nicht aktualisiert

Ich habe einNSMenu angehängt an aNSStatusItem (eine Menüleistenanwendung). Beim Herunterladen einer Datei möchte ich einen NSProgressIndicator in einem Element dieses Menüs anzeigen. Ich habe eine erstelltNSViewController Unterklasse für diese Fortschrittsanzeige mit folgenden Eigenschaften:

@property NSUInteger current; // Bound to NSProgressIndicator value
@property NSString *status;   // Bound to a NSTextField value
@property NSUInteger total;   // Bound to NSProgressIndicator max value

Bei Bedarf starte ich den Download der Datei mit folgendem Code, der in läuftNSRunLoopCommonModes Damit werden die Delegate-Methoden auch aufgerufen, wenn dieNSMenu wird angezeigt (was läuft inNSEventTrackingRunLoopMode):

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
[connection start];

In demdidReceiveData delegate method Ich habe dann die Eigenschaften für my festgelegtNSViewController Unterklasse:

progressViewController.current = receivedData.length;
progressViewController.status = @"Downloading...";
progressViewController.total = expectedBytes;

Das funktioniert prima, wenn ich die Eigenschaften an ein Label binde, aber dasNSProgressIndicator Updates nur wenn ich das Menü öffneVor Die Verbindung wird gestartet und erst wieder geschlossen, wenn der Download abgeschlossen ist. Wenn ich es danach öffne, wird die Fortschrittsanzeige nicht aktualisiert. Es zeigt den Wert an, den die Eigenschaften zu dem Zeitpunkt hatten, als ich das Menü geöffnet habe, aber dieser Wert wird nicht aktualisiert. Die Fortschrittsanzeige ist dann auch nicht animiert. Beachten Sie die Beschriftungenmachen Arbeit...

Ich habe versucht, manuell anzurufensetNeedsDisplay mitYES und Ruf andisplay Wenn ich die Werte ändere, wird sowohl in der benutzerdefinierten Ansicht als auch in der Fortschrittsanzeige nichts angezeigt, aber das funktioniert nicht. Das Einzige, was die Fortschrittsanzeige repariert, ist das Aufrufen[progress setHidden:YES]; [progress setHidden:NO]; in schneller Folge, aber das führt dazu, dass die Fortschrittsanzeige flackert, und ist natürlich eine schlechte Lösung.

Was mache ich falsch? Wie kann ich das beheben?NSProgressIndicator?