(ツールバーというか、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すると、それ以降は値がファイルに保存され起動時に使われる。