ページ

2010年4月22日木曜日

APplication List (8) リストの永続化 / NSUserDefaultsへ保存

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

(連載)Cocoaの日々: Application List

アプリケーションリストを NSUserDefaults へ保存する。

今回は更新される度に保存するようにした。
AppListAppDelegate.m

- (void)rearrangeList
{
[arrayController_ rearrangeObjects];
NSUserDefaults* userDefaults =
[[NSUserDefaultsController sharedUserDefaultsController] values];
NSMutableArray* pathList = [NSMutableArray array];
for (ApplicationEntry* entry in appList_) {
[pathList addObject:entry.path];
}
[userDefaults setValue:pathList forKey:UDKEY_HELPER_APPLICATION_LIST];
}


特に工夫無くパス名を配列へ書き出し、それを NSUserDeafults へ保存している。カスタムクラス(ApplicationEntry) は NSUserDeafults の書き出しに対応していない。NSUserDefaultsController をわざわざ使っているのは SimpleCap で使っているのでそれに合わせただけ。

起動時に NSUserDefaults からこれを読み出してリスト表示へ反映させる。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
:
NSUserDefaults* userDefaults =
[[NSUserDefaultsController sharedUserDefaultsController] values];
NSArray* pathList = [userDefaults valueForKey:UDKEY_HELPER_APPLICATION_LIST];
for (NSString* path in pathList) {
[appList_ addObject:[[[ApplicationEntry alloc] initWithPath:path] autorelease]];
}
[arrayController_ rearrangeObjects];
:
}


実行してみよう。
操作を行うと ~/Library/Preferences 配下にファイルが作成される。

中身はこんな感じ。
次回起動時には直前のリストが復元された。

(メモ)SimpleCapの場合、ビューア(SimpleViewer)がNSUserDefaults のアプリケーション設定の変更を監視している。設定が変更されたらアプリケーションアイコンの表示を書き換える必要がある。