NSUserDefaultsに任意のクラスを保存する

12月 12, 2010 · Posted in iOS SDK, iPhone開発, Objective-C, Xcode, データ保存 · Comment 

概要

NSUserDefaultsに独自クラスを格納する方法。

要約

NSCodingプロトコルを独自クラスで実装し、NSKeyedArchiverを利用してNSDataクラスのオブジェクトに変換し、NSUserDefaultsに保存する。

やってみる

独自クラス(.h)

#import <Foundation/Foundation.h>

@interface MyData : NSObject <NSCoding>{
	NSString *url;
}

@property(nonatomic, retain) NSString *url;

@end

独自クラス(.m)

#import "MyData.h"

@implementation MyData
@synthesize url;

// (略)

- (void)encodeWithCoder:(NSCoder*)coder {
	[coder encodeObject:self.url forKey:@"URL"];
}

- (id)initWithCoder:(NSCoder*)coder {
	if ( (self = [super init]) ) {
		self.url = [coder decodeObjectForKey:@"URL"];
	}
	return self;
}

データ保存

MyData *data = [[MyData alloc]init];
data.url = @"http://example.com/";

// データ変換
NSData *archivedData  = [NSKeyedArchiver archivedDataWithRootObject:data];

// 保存
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:archivedData forKey:@"DATA"];

データ取得

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *nsMyData = [defaults dataForKey:@"DATA"];	

// データ変換
MyData *data = [NSKeyedUnarchiver unarchiveObjectWithData:nsMyData];

NSUserDefaultsの利用 – iPhoneアプリケーション開発

11月 14, 2010 · Posted in iOS SDK, iPhone開発, Objective-C, Xcode, データ保存, 基礎 · Comment 

概要

NSUserDefaultsは、アプリケーションの設定値を保存するためのクラス。ただし、設定値に限らず様々な用途に利用することも可能。

iPhoneアプリでデータを永続化(保存)するためには、いまのところ以下のような方法が考えられる。

  • NSUserDefaultsの利用
  • CoreDataの利用
  • ファイル出力
  • サーバに転送して保存

なかでもNSUserDefaultsは、アプリケーション内でグローバルに利用することができるKey-Value形式のデータストアなので、CoreDataを利用するまでもない小規模アプリのデータ保存なら、このクラスで十分な場合が多い。

基本的な使い方

値の保存

// NSUserDefaultsクラスのオブジェクトを取得
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

// 値の保存
[defaults setValue:@"tarou" forKey:@"username"];
[defaults synchronize];

値の取り出し

// NSUserDefaultsクラスのオブジェクトを取得
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// 値の取り出し
NSString *userName = [defaults stringForKey:@"username"];
if (userName) {
	NSLog(@"%@", userName);
}else{
	NSLog(@"not found");
}

キーが設定されていない場合はnilが返却される。

様々なオブジェクトの保存・取得

いろいろなオブジェクトを設定するためのメソッドが用意されている。

設定

– setBool:forKey:
– setFloat:forKey:
– setInteger:forKey:
– setObject:forKey:
– setDouble:forKey:
– setURL:forKey:

取得

– arrayForKey:
– boolForKey:
– dataForKey:
– dictionaryForKey:
– floatForKey:
– integerForKey:
– objectForKey:
– stringArrayForKey:
– stringForKey:
– doubleForKey:
– URLForKey:

例:NSMutableArrayの格納・取得

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"tarou" forKey:@"username"];

NSMutableArray *nsma = [NSMutableArray array];
[nsma addObject:@"value1"];
[nsma addObject:@"value2"];
[nsma addObject:@"value3"];
[defaults setObject:nsma forKey:@"nsma"];
[defaults synchronize];

NSMutableArray* array = [defaults objectForKey:@"nsma"];
for ( NSString* value in array ) {
	NSLog(@"value:%@", value);
}