3

バインディングをいじり始めたところです。いくつかの NSColorWell を共有デフォルト コントローラーにバインドする設定ダイアログの実装を開始しました。それは完璧に機能しています。私の値は正しくエンコードされ、保存されます。

ただし、機能していないのは、ダイアログをキャンセルすることです。キャンセルしても、値は保存されます。

キャンセル ボタンを NSUserDefaultController の「元に戻す」にバインドする必要があるようですが、もちろんそうすると、「performClose」にバインドできません (ボタンを複数のアクションにバインドする方法がない限り)。認識していません)。

変更を元に戻し、ウィンドウを閉じるには、キャンセル ボタンをバインドする必要があります。明らかに、両方を実行するアクション メソッドを作成することでそれを行うことができますが、IB だけで可能であるように思われます。

4

1 に答える 1

7

2つのこと:

まず、慣例により、Mac OS X の環境設定は、変更が行われるとすぐに適用されます。(Windows のように) 設定の変更に「キャンセル」または「適用」はありません。設定をリセットする「デフォルト」ボタンがあることはまったく珍しいことではありませんが、変更がすぐに適用されるため、キャンセルはありません。それ以外の方法でアプリの設定を機能させるのは、規則に従わないため少し奇妙です。

第 2 に、バインディングを介してこれらの値を直接変更しているため (ターゲット/アクション メカニズムを使用した場合と同じ)、変更を取り消す機会を自分自身に残していません。ここで行う最善の方法は、コンテンツがアプリの設定のコピーであるディクショナリ コントローラーを作成することです。編集はその辞書で行われます。ユーザーがキャンセルした場合は、辞書を破棄するだけです。ユーザーが変更を受け入れる場合は、辞書の設定を実際のアプリの設定にコピーしてから破棄します。アプリの設定を「バッファリング」する必要がある場合、UI を設定に接続するために Bindings を使用しながらこれを行うのは良い方法ですが、ユーザーが受け入れたときに変更を適用する責任は依然としてあります。

于 2009-12-25T21:17:34.823 に答える