(メニュー バー アプリケーション)に が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
値を変更するときに、カスタム ビューと進行状況インジケーターの両方で手動でwithYES
とom を呼び出そうとしましdisplay
たが、うまくいきません。[progress setHidden:YES]; [progress setHidden:NO];
進行状況インジケーターを修正する唯一の方法は、立て続けに呼び出すことですが、これは進行状況インジケーターがちらつきます。もちろん、これは悪い解決策です。
私は何を間違っていますか?どうすればこれを修正できますNSProgressIndicator
か?