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