いくつかのデフォルトを登録するために使用する+(void)initialize
メソッドを含むAppDelegateクラスがあります。これが私が使用するコードです:
+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
また、プリファレンスのステータスを表示するいくつかのチェックボックス(NSButton
)を保持するPreferences.xibも作成しました。それらは同じキー(この場合はfooKeyとbarKey)でNSUserDefaultsController
にバインドされます。アプリを起動して「デフォルト」を変更するたびに、次回のアプリの起動時に復元されます。
既存の値を上書きせずに「デフォルトのデフォルト」を登録する方法はありますか?アプリをビルドして起動するたびに、設定ファイルが再作成されているのでしょうか?多分私はチェックボックスをNSUserDefaultsController
からバインド解除し、設定ウィンドウコントローラーのカスタムコードでキーの値を自分で維持する必要がありますか?
ユーザーのデフォルトを維持するための選択の実装についてお聞かせください。
Mac OS X 10.6.2とXCode 3.2.1を使用しています
-registerDefaults:
のドキュメントから(強調を追加):
登録ドメインの内容はディスクに書き込まれません。 アプリケーションが起動するたびにこのメソッドを呼び出す必要があります。アプリケーションのResourcesディレクトリにplistファイルを配置し、そのファイルから読み込んだ内容でregisterDefaults:を呼び出すことができます。
だからあなたのコードは正しい軌道に乗っていました。これは、デフォルトのデフォルトを登録する方法です。
私は通常これを-applicationDidFinishLaunching:
で使用します:
// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
Plistを使用すると、アプリのデフォルトの追加と変更が簡単になり、@"NO"
を値として誤って使用することもなくなります。
編集:Swiftバリアント:
UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])