(連載)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 のアプリケーション設定の変更を監視している。設定が変更されたらアプリケーションアイコンの表示を書き換える必要がある。