2014-05-23 91 views
2

我已將NSMenu連接到NSStatusItem(菜單欄應用程序)。在下載文件時,我想在此菜單的項目中顯示NSProgressIndicator。我創建了一個NSViewController子類具有以下屬性此進度指示器:NSMenuItem中的NSProgressIndicator未在第二臺顯示器上更新

@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更新,如果我打開菜單之前的連接開始,再次直至下載完成後不要關閉它。但是如果我以後打開它,進度指示器不會更新。它顯示了我打開菜單時屬性的值,但此值不會更新。進度指示器也不動畫。注意標籤工作...

我試圖手動調用setNeedsDisplayYES,並呼籲display OM上的自定義視圖和進度指示器既當我改變的值,但不起作用。修復進度指示器的唯一方法是快速連續調用[progress setHidden:YES]; [progress setHidden:NO];,但這會導致進度指示器閃爍,當然這是一個不好的解決方案。

我在做什麼錯?我該如何解決這個問題NSProgressIndicator

+0

喜蛙,我面臨着類似的問題。我在NSMenuItem中有一個NSProgressIndicator。當我第一次打開它而不是第二次時它是動畫。你有沒有找到解決你的問題的辦法? – Jasper

+0

我從來沒有能夠解決這個確切的問題,但是當你將'NSProgressIndicator'放入'NSTableView'時,這個錯誤不會發生。因爲無論如何我需要一個指標列表,這對我來說不成問題。我仍然不知道如何解決這個確切的問題,但...可能是另一個錯誤,在'NSMenuItem'中查看... – Frog

+0

感謝您的更新,我會嘗試 – Jasper

回答

0

我有同樣的問題,這個答案解決我的問題: https://stackoverflow.com/a/4692194/406677

在SWIFT:

progressIndicator.performSelector("startAnimation:", withObject:self, afterDelay: 0.0, inModes: [NSEventTrackingRunLoopMode]) 
相關問題