NSUserDefaults でアプリケーションの設定値を管理する : Objective-C プログラミング

PROGRAM


NSUserDefaults でアプリケーションの設定値を保存する

Mac OS X や iPhone プログラミングでは、NSUserDefaults クラスを利用して、アプリケーションの設定値を簡単に扱うことが出来るようになっています。

たとえば、次の値をアプリケーションの設定で使用するとします。

変数名 変数の型
isValid BOOL
allowList NSArray*
displayName NSString*

これを設定ファイルとして保存するには、次のようなコードを記載します。

// NSUserDefaults インスタンスを準備します。

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

 

// 変数の値を NSUserDefaults にセットします。

[defaults setBool:isValid forKey:@"isValid"];

[defaults setObject:allowList forKey:@"allowList"];

[defaults setObject:displayName forKey:@"displayName"];

 

// セットした内容を設定ファイルに書き出します。

[defaults synchronize];

これで、NSUserDefaults に設定した内容が、適切な設定ファイルへと自動的に保存されます。

ここでは Key として変数名と同じものを渡していますが、任意のもので構いません。このキーの値は、設定ファイルから値を読み込む際にも使用します。

setBool:forKey などの専用のものがあるデータ型はそれを使って書き込み、NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary は setObject:forKey メソッドを使って書き込みます。読み込みの際には dataForKey や stringForKey などの、対応したメソッドを使って取り出します。

このとき、NSArray や NSDictionary に格納されているデータ型は、プロパティリストオブジェクト である必要があるとのことです。そうでない場合には、独自クラスを NSData に変換する で記したように NSData 型に変換して格納する形になります。

 

また、インターネット上の情報では synchronize メソッドを呼ぶ記載が見られない場合がほとんどのようですけど、設定ファイルへ書き出されるタイミングを意図したものにするためにも、意識的に synchronize メソッドを呼び出すようにしておいた方が良いと思います。

 

なお、NSUserDefaults で取り扱える変数の型は、NSInteger, BOOL, float, double, NSString, NSArray, NSDictionary, NSData といったものを格納できるようです。

それ以外の型については NSData 型に変換してそれを格納するといったことが必要になってきます。

 

NSUserDefaults でアプリケーションの設定値を取得する

設定ファイルに保存されている値を取得したい場合には、次のような対応で、NSUserDefaults のメソッドを使用します。

取得する型 取得メソッド名
NSInteger intergerForKey:(NSString*)keyName
BOOL boolForKey:(NSString*)keyName
float floatForKey:(NSString*)keyName
double doubleForKey:(NSString*)keyName
NSString* stringForKey:(NSString*)keyName
NSArray* arrayForKey:(NSString*)keyName
NSDictionary* dictionaryForKey:(NSString*)keyName
NSData* dataForKey:(NSString*)keyName

たとえば、前に示した設定値の保存で記録した内容を読み込む場合には、次のような感じになります。

// NSUserDefaults インスタンスを準備します。

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

 

// NSUserDefaults に保存された値を変数に読み込みます。

isValid = [defaults booleanForKey:@"isValid"];

allowList = [defaults arrayForKey:@"allowList"];

displayName = [defaults stringForKey:@"displayName"];

こちらについても、NSUserDefaults で直接扱えなかった型は、NSData 形式で取り出してから、元の型に変換する必要があります。

NSData へ変換する方法については、独自クラスを NSData に変換する も参考にしてみてください。

[ もどる ]