34

+(void)initializeいくつかのデフォルトを登録するために使用するメソッドを持つ AppDelegate クラスがあります。私が使用するコードは次のとおりです。

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

NSButtonまた、設定のステータスを表示するいくつかのチェックボックス ( ) を保持する Preferences.xib も作成しました。それらはNSUserDefaultsController同じキー (この場合は fooKey と barKey) でバインドされます。アプリを起動して「デフォルト」を変更するたびに、次回のアプリ起動時に復元されます。

既存の値を上書きせずに「デフォルトのデフォルト」を登録する方法はありますか? アプリをビルドして起動するたびに、設定ファイルが再作成されているのではないでしょうか? NSUserDefaultsController設定ウィンドウコントローラーのカスタムコードを使用して、チェックボックスのバインドを解除し、キーの値を自分で維持する必要がありますか?

ユーザーのデフォルトを維持するための選択の実装を聞きたいです。

Mac OS X 10.6.2 と XCode 3.2.1 を使用しています

4

1 に答える 1

75

-registerDefaults:(強調を追加)のドキュメントから:

登録ドメインの内容はディスクに書き込まれません。アプリケーションが起動するたびにこのメソッドを呼び出す必要があります。アプリケーションのResourcesディレクトリにplistファイルを配置し、そのファイルから読み込んだ内容でregisterDefaults:を呼び出すことができます。

したがって、コードは正しい方向に進んでいました。これは、デフォルトのデフォルトを登録する方法です。

私は通常これを使用します-applicationDidFinishLaunching:

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

plistを使用すると、アプリでデフォルトを簡単に追加および変更でき@"NO"、値としての使用を間違えることもなくなります。

編集:Swift 3バリアント:

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
于 2010-01-16T19:24:59.367 に答える