私は通常、すべてのアプリケーション設定を保持するカスタムクラスを作成します。そのクラスは、プログラムの起動時に、一度userDefaultsの変更可能なコピーをロードし、その後、増分のすべてが道に沿って保存し処理することができます:
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]
を呼び出します。追加ボーナスとして
MyPreferences * myPrefs = [myApplication myPrefs];
[myPrefs setObject:bar forKeyPath:@"allPrefs.foo.bar"];
[myPrefs save];
、あなたはの利点をもたらし、MyPreferences
クラスにあなたが好きなように構造化することができます。プログラムの実行中に任意の好みはmyPrefs
を介して変更した後、必要に応じて[myPrefs save]
を呼び出すことによって保存することができます変更しましたOOプログラミングをプリファレンス全体のセットに適用する。ここでは簡単な方法を示しましたが、単純に変更可能な辞書を使用していましたが、それぞれのプリファレンスをプロパティにして、より複雑なオブジェクトのプリ/ポスト処理をNSColor
などに行うことができます。