技術ブログ

プログラミング、IT関連の記事中心

NSUserdefaultsにNSMutablearrayを格納する/読み出す【Objective-C】

◾️はじめに

「NSUserDefaults」を使用して、データの保存などを行う際に、リスト形式のデータをそのまま
使用したい場合がある。
ここでは、「NSUserDefaults」に「NSMutableArray」を格納、取得を行う方法を記載する。

◾️NSUserDefaultsにNSMutableArrayを格納する

「NSUserDefaults」に「NSMutableArray」を格納するには、そのままでは格納ができない。
その為、一旦「NSData」に変換してから格納する。

具体的には、以下の様に設定する。
(以下では、「NSMutableArray」に値を設定していないが、設定しても同様です。)

// NSUserDefaultsのインスタンスを生成する
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
// NSUserDefaultsに格納するNSMutableArrayのインスタンスを生成する
NSMutableArray *array = [[NSMutableArray alloc] init];
// NSMutableArrayをNSData型に変換する
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
// NSUserDefaultsに値を設定する
[ud setObject:data forKey:@"TargetKey"];
// 設定を反映する
[ud synchronize];

◾️ NSUserDefaultsからNSMutableArrayを取得する

「NSUserDefaultsにNSMutableArrayを格納する」で記載した通り、「NSMutableArray」を
「NSUserDefaults」に格納するために、「NSData」型に変換した。
そのため、取得する際には、「NSData」型から「NSMutableArray」に変換する必要がある。

具体的には、以下の様に取得する。

// NSUserDefaultsのインスタンスを生成する
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
// NSUserDefaultsからNSData型の値を取得する
NSData *data = [ud objectForKey:@"TargetKey"];
// NSData型からNSMutableArray型へ変換する
NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];