ページ

2008年9月10日水曜日

ツールバー(その12)

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

さらにユーザーデフォルトは続く。

前回のマニュアルを参考に NSUserDefaults#registerDefaults を使う。

例に従って .plist ファイルを作成する。Xcodeだと標準のエディタで編集できる。




前回のコードに追加する。

+(void)initialize
{
NSDictionary* user_defaults =
[NSDictionary dictionaryWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"]];

[[NSUserDefaults standardUserDefaults] registerDefaults:user_defaults];

NSDictionary* initial_values =
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:1], @"check1",
[NSNumber numberWithInt:1], @"check2",
[NSNumber numberWithFloat:50.0], @"slider",
nil];
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initial_values];
}



実行してみる。

NSUserDefaults#registerDefault: の値が使われている。NSUserDefaultsController#setInitialValues: よりも優先されている。




ここで "revertToInitialValues"ボタンを押す。するとNSUserDefaultsController#setInitialValues: の値が使われる。



この後、値を変更して save を押して終了させる。そして再び起動すると、最後に saveされた値が表示される。

- - - - - - - - - -

一連の検証をまとめると初期値の扱いは次の順番で使われることが分かった。

1. ~/Library/Preferences/*.plist に保存された値
2. NSUserDefaults#registerDefault: で設定した値
3. NSUserDefaultsController#setInitialValues: で設定した値

1. が無ければ 2.が使われ、2.が無ければ 3.が使われるという動きになる。

また、NSUserDefaultsController#revertToInitialValuesを呼ぶと 3. の値が使われる。3.の設定がなければ何も起らない。