iPhoneアプリ開発の虎の巻
HOME > NSUserDefaults

NSUserDefaults

アプリケーションの設定値など、アプリを停止させてもずっと保持しておきたい情報などはよくありますが、NSUserDefaultsを使うとそうしたデータを簡単に保持できます。

使い方としてはNSUserDefaultsを取得して、取得したNSUserDefaultsに対してデータを保存したり取り出したりすることでデータ保持を行います。

ラベル

NSUserDefaultsのクラス階層

NSObject ↑ NSUserDefaults

生成

// NSUserDefaultsの取得
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

NSUserDefaultsを取得する時は常にこの方法で取得します。この方法だとNSUserDefaultsがある場合はそれを返してくれ、NSUserDefaultsが無い場合は新規に生成して返してくれます。

NSUserDefaultsのメソッド

【NSUserDefaultsの主要メソッド】
メソッド 説明
-(void)setInteger:(NSInteger)value
forKey:(NSString *)defaultName
int型のデータを保存する
-(void)setFloat:(float)value
forKey:(NSString *)defaultName
float型のデータを保存する
-(void)setDouble:(double)value
forKey:(NSString *)defaultName
double型のデータを保存する
-(void)setBool:(BOOL)value
forKey:(NSString *)defaultName
BOOL型のデータを保存する
-(void)setObject:(id)value
forKey:(NSString *)defaultName
NSString型、NSNumber型、NSArray型、NSDictionary型、 NSData型、NSDate型のデータを保存する
-(BOOL)synchronize 保存する情報を即時に反映させる
-(NSInteger)integerForKey:
(NSString *)defaultName
int型としてデータを読み込む
-(float)floatForKey:
(NSString *)defaultName
float型としてデータを読み込む
-(double)doubleForKey:
(NSString *)defaultName
double型としてデータを読み込む
-(BOOL)boolForKey:
(NSString *)defaultName
BOOL型としてデータを読み込む
-(NSString *)stringForKey:
(NSString *)defaultName
NSString型としてデータを読み込む
-(NSArray*)arrayForKey:
(NSString*)defaultName
NSArray型としてデータを読み込む
-(NSArray*)stringArrayForKey:
(NSString*)defaultName
NSString型で構成されたNSArray型としてデータを読み込む
-(NSDictionary*)dictionaryForKey:
(NSString*)defaultName
NSDictionary型としてデータを読み込む
-(NSData*)dataForKey:
(NSString*)defaultName
NSData型としてデータを読み込む
-(id)objectForKey:
(NSString*)defaultName;
id型としてデータを読み込む

主要なメソッドのみ掲載しています。
 上記「NSUserDefaultsのクラス階層」にあるクラスのメソッドも使用できます。

NSUserDefaults例文

// NSUserDefaultsに初期値を登録する
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  // 取得
NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:@"99" forKey:@"KEY_I"];  // をKEY_Iというキーの初期値は99
[defaults setObject:@"99.99" forKey:@"KEY_F"];  // をKEY_Fというキーの初期値は99.99
[defaults setObject:@"88.88" forKey:@"KEY_D"];  // をKEY_Dというキーの初期値は88.88
[defaults setObject:@"YES" forKey:@"KEY_B"];  // をKEY_Bというキーの初期値はYES
[defaults setObject:@"hoge" forKey:@"KEY_S"];  // をKEY_Sというキーの初期値はhoge
[ud registerDefaults:defaults];

NSUserDefaultsにデフォルト値を設定したい場合は registerDefaultsメソッドを使用して登録します。
登録の仕方は上のサンプルのとおり、ディクショナリにキーと値を設定して、それを registerDefaultsへ渡します。
このメソッドで初期値を登録すると、既に同じキーが存在する場合は初期値をセットせず、キーが存在しない場合だけ値をセットしてくれますので大変便利です。

オブジェクト型ではない値をセットしたい場合は、上のサンプルみたいにNSString型として渡すか、NSNumber型として渡せばOKです。

// NSUserDefaultsに保存・更新する
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  // 取得
[ud setInteger:100 forKey:@"KEY_I"];  // int型の100をKEY_Iというキーで保存
[ud setFloat:1.23 forKey:@"KEY_F"];  // float型の1.23をKEY_Fというキーで保存
[ud setDouble:1.23 forKey:@"KEY_D"];  // double型の1.23をKEY_Dというキーで保存
[ud setBool:YES forKey:@"KEY_B"];  // BOOL型のYESをKEY_Bというキーで保存
[ud setObject:@"あいう" forKey:@"KEY_S"];  // "あいう"をKEY_Sというキーで保存
[ud synchronize];  // NSUserDefaultsに即時反映させる(即時で無くてもよい場合は不要)

※同じキーのデータが無い場合は新規保存、ある場合は更新となります。

※NSUserDefaultで保持できる型は、NSString型、NSNumber型、NSArray型、NSDictionary型、 NSData型、NSDate型のみです。これ以外の型を保持させたい場合は一旦NSData型に変換してから保持し、読み込む時もNSData型として読み込んだ後に型変換を行う必要があります。

// NSUserDefaultsからデータを読み込む
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  // 取得
int i = [ud integerForKey:@"KEY_I"];  // KEY_Iの内容をint型として取得
float f = [ud floatForKey:@"KEY_F"];  // KEY_Fの内容をfloat型として取得
double d = [ud doubleForKey:@"KEY_D"];  // KEY_Dの内容をdouble型として取得
BOOL b = [ud boolForKey:@"KEY_B"];  // KEY_Bの内容をBOOL型として取得
NSString s = [ud stringForKey:@"KEY_S"];  // KEY_Sの内容をNSString型として取得
// NSUserDefaultsからデータを削除する
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  // 取得
[ud removeObjectForKey:@"KEY_I"];  // KEY_Iを削除する
totop