質問

StatusBar-Menu内でnsprogressIndicator(不定)を使用しようとしています。 Menuitemのビューとしてnsview-objectを使用しています。その後、進行状況インジケーターをサブビューして表示します。しかし、私がStartAnimationを呼びかけようとするときはいつでも:進歩のために、何も起こりません。私が通常のnswindowでまったく同じことをしようとすると、それは完全に機能します。

私はCocoaとObjective-Cの両方を初めて使用しているので、「明白な」何かを見落としていたかもしれませんが、私は回避策をかなり検索しましたが、成功しませんでした。 Menuitemsは表示されている間に更新できず、代わりにボードレスウィンドウを使用する必要があることがわかりました。しかし、私はこれをドキュメントで確認することができませんでした。

編集:

わかりました、今はほとんど機能します。 setSusthreadededanimationを使用する場合:およびMenudelegateのメニューウィロペンから新しいスレッドを作成します。このスレッドはローカルメソッドを実行します:

-(void) doWork(NSProgressIndicator*) p{
     [p startAnimation:self];
}

これにより、メニューを開くときにランダム(?)ベースでProgressIndicatorが開始されます。私が電話した場合 startAnimation: 通過せずに直接 doWork: (まだ新しいスレッドを使用しています)、それは決して機能しません。そうではありません setUsesThreadedAnimation: Animationのためにそれが独自のスレッドを作成するProgress-Barに作成しますか?

役に立ちましたか?

解決

使用してそれを解決しました:

[progressIndicator performSelector:@selector(startAnimation:)
                            withObject:self
                            afterDelay:0.0
                               inModes:[NSArray 
                       arrayWithObject:NSEventTrackingRunLoopMode]];

MenuWillopen:内部では、問題はStartAnimationを呼び出していたようです。

他のヒント

どのように参照していますか NSProgressIndicator それはビューにあります(そして、その点については窓の中にありますか)?たとえば、持っているコントローラークラスはありますか IBOutlet進捗指標に接続しましたか?あなたが使用している場合 IBOutlet, 、nibファイルに適切に接続されていると確信していますか?

また、いつ、いつ電話していますか startAnimation:? (いくつかのコードを見る必要があります)。

時々起こることができることの1つは、あなたがフックアップするのを忘れていることです IBOutlet ペン先に。次に、実行時にコードで何かを実行するようにオブジェクトに指示しようとすると、 IBOutletnil, 、そして、あなたが思うのは、あなたのオブジェクトに送信されるメッセージは実際には、 nil. 。言い換えれば、それはただ無視されており、効果的に機能していないように見えます。

UIオブジェクトへの(潜在的に)有効な参照を持っている場合、あなたが見るもう1つの一般的な問題は、開発者が時間の「早すぎる」でオブジェクトにメッセージを送信しようとしているときです。一般に、 init メソッドは、コントローラーオブジェクトの寿命の早すぎて、ユーザーインターフェイスオブジェクトにメッセージを送信できません。 IBOutletまだです nil. 。その時には -awakeFromNib 呼ばれています、 IBOutletsは有効である必要があります(IBに接続した場合)、UIオブジェクトにメッセージを送信できます。

-setusesthreadededanimationを介してスレッドアニメーションを使用するように言ったことがありますか:?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top