NSUserDefautlsController には #save: と #revert: というメソッドが用意されている。これを試してみよう。
InterfaceBuilder でボタンを追加し、ボタンの Targetに save: と revert:を接続するだけ。
実行してみる。
。。。。。ボタンを押しても何もおこらない。
ドキュメントを調べてみると #appliesImmediately:, #setAppliesImmediately というメソッドが見つかる。
NSUserDefaultsController#appliesImmediately
デフォルトでは appliesImmediatelyは YES を返すようになっている。すなわち、コントロールが変更されると即時にファイルへ書き込まれる(正確には NSUserDefaultsへの書き込み)ようになっている。このため revert: を送っても、既に変更が確定した後であるため何も起らなかった。
そこで ApplicationController にアウトレットを用意し、"Shared User Defaults Controller"へ接続する。
@interface AppController : NSObject {
:
IBOutlet NSUserDefaultsController* _user_defaults_controller;
}
その上で起動時に setAppliesImmediately:YES を送る。
- (void)awakeFromNib
{
:
[_user_defaults_controller setAppliesImmediately:NO];
}
実行してみよう。
今度は save を押さない限り、状態は保存されなくなった。その代わり、saveを押すまでの間 revert: を押すとそれまでの変更が破棄されて直前に saveを押した時の状態に戻るようになった。
サンプル:
ToolBar-06.zip