次はファイルの保管場所。
"Choose..."を押すとダイアログが開いて保存先を選べる。
ダイアログのオープンには NSPanel#runModalForDirectory:file:types: を使う。
PreferenceController.m
- (void)chooseImageLocation:(id)sender
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setCanCreateDirectories:YES];
[openPanel setAllowsMultipleSelection:NO];
int result = [openPanel runModalForDirectory:NSHomeDirectory()
file:nil
types:nil];
if (result == NSOKButton) {
NSArray* filenames = [openPanel filenames];
if ([filenames count] > 0) {
NSString* new_path = [filenames objectAtIndex:0];
[UserDefaults setValue:new_path forKey:UDKEY_IMAGE_LOCATION];
}
}
}
上記の UserDefaults は NSDefaultsController を初期化したりするラッパー。パネルでフォルダが選択されたらユーザでフォルトへ書き込む。
NSDefaultsController 経由の書き込みは #values で取り出したオブジェクトに対して #setValue:forKey: を投げる。するとNSDefaultsControllerとバインドされたビュー上のオブジェクトも値が更新される。