2010年11月8日月曜日

NSUserDefaultsを使ってオブジェトのリストを保存する。

NSUserDefaultsを使って、NSMutableArrayにオリジナルクラスを格納し保存する方法です。

最初は下記のようにやっていたのですが、上手く動作しませんでした。

★保存時
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

NSMutableArray *array = [[NSMutableArray alloc] init];

for (int i=0; i<100; i++)
{
Player* test = [[[Player alloc] init] autorelease];
test.id = [NSString stringWithFormat:@"%04d", i];
test.name = @"aaaa";

[array addObject:test];
}

[defaults setObject:array forKey:@"TEST"];

NSData* classData = [NSKeyedArchiver archivedDataWithRootObject:array];
[defaults setObject:classData forKey:@"TEST"];

★復元時
NSMutableArray* array = [defaults arrayForKey:@"TEST"];

for (int i=0; i {
Player* player = (Player*)[array objectAtIndex:i];
NSLog( player.id );
NSLog( player.name );
}

■下記のように対応することで上手く動作しました。

保存時の処理を下記のように修正
[defaults setObject:array forKey:@"TEST"];

NSData* classData = [NSKeyedArchiver archivedDataWithRootObject:array];
[defaults setObject:classData forKey:@"TEST"];

復元時の処理を下記のように修正
NSMutableArray* array = [defaults arrayForKey:@"TEST"];

NSData* classData = [defaults dataForKey:@"TEST"];
NSMutableArray* array = [NSKeyedUnarchiver unarchiveObjectWithData:classData];


※ ここで使っているPlayerクラスはNSCodingインタフェースを実装しています。

0 件のコメント:

コメントを投稿