私は通常、すべてのアプリケーション設定を保持するカスタム クラスを作成します。そのクラスは、プログラムの開始時に userDefaults の変更可能なコピーを 1 回ロードし、途中ですべての増分保存を処理できます。
MyPreferences.h
@interface MyPreferences
{
NSMutableDictionary allPrefs;
}
@property (readonly) NSMutableDictionary * allPrefs;
- (void)load;
- (void)save;
@end
MyPreferences.m
@implementation MyPreferences
@synthesize allPrefs;
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
allPrefs = [[NSMutableDictionary alloc] initWithCapacity:0];
return self;
}
- (void)dealloc
{
[allPrefs release];
[super dealloc];
}
- (void)load
{
// load all mutable copies here
[allPrefs setObject:[[defaults objectForKey:@"foo"] mutableCopy]
forKey:@"foo"];
// ...
}
- (void)save
{
[defaults setObject:allPrefs forKey:@"app_preferences"];
}
@end
アプリケーション デリゲートでこのクラスのインスタンスを作成し、アプリケーションの起動時に呼び出し[myPrefs load]
ます。プログラムの実行中に変更された設定は、 を使用して変更し、必要に応じmyPrefs
て呼び出して保存できます。[myPrefs save]
MyPreferences * myPrefs = [myApplication myPrefs];
[myPrefs setObject:bar forKeyPath:@"allPrefs.foo.bar"];
[myPrefs save];
追加のボーナスとして、MyPreferences
クラスを好きなように構成できるため、OO プログラミングの利点を設定全体にもたらすことができます。ここでは変更可能なディクショナリを使用する簡単な方法を示しましたが、各設定をプロパティにしてNSColor
、たとえば のようなより複雑なオブジェクトの前処理と後処理を行うことができます。