2

NSSavePanelとNSOpenPanelのアクセサリビューに問題があります。

時々(非常に頻繁に)これらのパネルの1つを開くと、アクセサリビューが機能しません(ビューは表示されますが、コントロールが無効になっているように見えます)。

パネルを表示するためにこのコードを使用しています:

[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];

これは、app-sandboxが有効になっている場合にのみ発生します。

多くのテストを行った後、何が起こっているのかは、ビューが置き忘れられている(パネルに取り付けられていない)ことであることがわかりました。

Mission Controlを開いて、マウスポインターをアプリのウィンドウ上に移動すると、「非表示」ウィンドウが強調表示され、それを選択すると、アクセサリビューを制御できるようになります(すべてのコントロールが機能します)が、開いているパネルまたは保存パネルから切り離されているように見えますスクリーンショットに示されているように。

スクリーンショット

この動作をテストするためだけに新しいアプリを作成しようとしましたが、再現できなかったので、それは私のアプリと関係があると思います。

私が間違っているかもしれないことのヒントはありますか?

この問題を解決するためだけに、すべてを最初からコーディングしたくはありません。

編集

ちなみに、ウィンドウを閉じると、ウィンドウを閉じる直前に、アクセサリビューがコントロールの正しい値で点滅します。アプリケーションがパネルの表示に間に合うようにビューを追加していないようです。

アップデート1

アクセサリビューとして使用されるビューをサブクラス化したところ、

- (void)viewWillMoveToSuperview:(NSView *)newSuperview

と呼ばれますが

- (void)viewDidMoveToSuperview

ビューが正しく表示されていても呼び出されることはありませんが、これは正常な動作ですか?

アップデート2

呼び出す必要があることを確認し- (void)viewDidMoveToSuperviewました。テストアプリでは、両方のメソッドが呼び出されます。

また、自分のアプリとテストアプリの間にわずかな違いがあることに気づきました。私のアプリでは、パネルは下にスライドするだけですが、テストアプリでは、パネルが「下にフリップ」しているように見えます(正確に説明する方法がわかりません)。パネルの表示方法は私には関係ありません。同じように表示されていないことに気づきました。

4

1 に答える 1

1

多くのことを試した後、問題はプロジェクトのARC(自動参照カウント)設定に関係していると結論付けました。

私の場合、プロジェクトではなくターゲットでARCを有効にしましたが、プロジェクトでARCを有効にした後(および結果として生じるエラーと警告に対処した後)、すべてが完全に機能するようになりました。

于 2012-07-21T14:55:09.890 に答える