ページ

2008年9月7日日曜日

ツールバー(その9)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

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