ページ

2008年9月9日火曜日

ツールバー(その11)

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

(ツールバーというか、NSUserDefaultsControllerの話題ばっかりだが)

引き続き setInitialValues: の話題。

マニュアルをもう少し読むと使い方がだんだんわかってきた。
Cocoaバインディング:ユーザデフォルトおよびバインディング(日本語があった)

このドキュメントによれば、デフォルト値の検索順序は次のようになっている。

1. values に含まれる、対応するキーの値
2. NSUserDefaultsController の defaults メソッドが返す NSUserDefaults インスタンスに含まれる、対応するキーの値
3. 初期値辞書に含まれる、対応するキーの値


1. は NSUserDefaultsController が内部的に持っている値で場合によっては保存されていない。2. は NSUserDefaults(ファイル)に保存されている値。そして 3. は initialValues: で設定した値だと思われる。


またドキュメントによれば initialalues: をクラス初期メソッド (initialize)で使うのが良いらしい。

やってみる。
+(void)initialize
{
NSLog(@"initialized");
NSDictionary* initial_values =
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:1], @"check1",
[NSNumber numberWithInt:1], @"check2",
[NSNumber numberWithFloat:50.0], @"slider",
nil];
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initial_values];
}


NSUserDefaultsController は #sharedUserDefaultsControllerで取得できるので、わざわざアウトレットで接続して awakeFromNibまで利用を待たなくても良いことがわかった。


実行する。

初めて起動したときの初期状態が initializeで設定した値になった。一旦 saveすると、それ以降は値がファイルに保存され起動時に使われる。