ページ

2008年10月28日火曜日

範囲選択履歴(その9)履歴の保存

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

履歴を NSUserDefaultsに保存する。その為に履歴のモデルにあたる SelectionHistoryに手を入れる。
履歴は NSSize を NSValueでラップし、これを NSArray で持っている。NSUserDefaultsは NSSizeを扱えないので NSStringに変換して保存する。とりだすときはその逆に NSStringから NSSizeへ戻してやる。標準でその為の関数が用意されている。

NSStringFromSize( )
NSSizeFromString


これらを使って読み込みと保存のメソッドを用意する。
SelectionHistory
- (void)load
{
if (_history_list) {
[_history_list release];
}
_history_list = [[NSMutableArray alloc] init];
NSArray* array = [UserDefaults valueForKey:UDKEY_SELECTION_HISTORY];
for (NSString* str in array) {
NSSize size = NSSizeFromString(str);
[_history_list addObject:[NSValue valueWithSize:size]];
}
}
- (void)save
{
NSMutableArray* array = [NSMutableArray array];
for (NSValue* value in _history_list) {
NSString* size = NSStringFromSize([value sizeValue]);
[array addObject:size];
}
[UserDefaults setValue:array forKey:UDKEY_SELECTION_HISTORY];
[UserDefaults save];
}


それぞれを適切な位置で呼出せば履歴の永続化が完了する。
NSUserDefaulsへのアクセスには以前作成した NSUserDefaultsController のラッパークラス UserDefaults を使う。
NSUserDefaultsController を使う場合は(デフォルトでは)しかるべきタイミングで save: を投げてやる必要がある。UserDefaultsにはその為のメソッド #saveを用意した。

UserDefaults
+ (void)save
{
[(NSUserDefaultsController*)[NSUserDefaultsController sharedUserDefaultsController] save:self];
}