2012-02-06 2 views
5

、私は次のことをやっている:setValueの代わりにregisterDefaultsを使用する理由:forKey :?私は私のアプリのデフォルトのプリファレンスを設定していた場合

1)辞書にSettings.bundle内部からRoot.plistを読みます。

2)優先順位が設定されている場合は、私がテストし、私は[NSUserDefaults standardUserDefaults] registerDefaults:]

問題を経由して、私のデフォルト辞書を登録していない場合で、registerDefaults:に登録デフォルトは、永続ストアに行っていないユーザーは決してそうであれば彼らの設定を変更私はデフォルトの設定を読んでいるとアプリを起動するたびにNSUserDefaultsとそれらを登録しています。

registerDefaults:を使用する代わりに、setValue:forKey:を使用して、デフォルト設定を永続ストアに移して、それぞれの起動時に辞書を登録する&を構築する必要はありません。しかし、Appleのdocumentationsample codeはともにregisterDefaults:を指しています。

registerDefaults:をいつ、なぜ使うべきか、なぜ/なぜ私がsetValue:forKey:を使うべきかを考えようとしていますか?

+1

この関連する質問が見つかりました:[[NSUserDefaults registerDefaults:]の使用は何ですか?](http://stackoverflow.com/questions/4931167/what-is-the-use-of-nsuserdefaults-registerdefaults)答えは違いを説明していますが、なぜあなたは他のものを使用するべきなのかについてはまだ言いません。 (回答は持続性に関する私の質問を無視しているようです) – gabrielk

答えて

5

問題は、registerDefaultsに登録デフォルトです:ユーザーは、私は私のデフォルトの設定を読み取り、NSUserDefaultsでアプリが起動するたびにそれらを登録しています自分の好みを変更することはありませんので、もし、永続ストアに行っていません。

はい。それはなぜ問題なのですか?あなたがコード内に持っているものをディスクに書き込むのはなぜですか?代わりにregisterDefaultsを使用しての

:forKey::私はsetValueのを使用することができ、私のデフォルトの設定は、各起動時に辞書を登録&を構築する必要性をバイパスして、永続ストアに行く持っています。しかし、Appleのドキュメントとサンプルコードの両方がregisterDefaults:を指しています。

「この値が設定されていますか?いいえ、今設定しました」に最初にチェックした場合のみです。 registerDefaults:を使用するよりも、コードとコストが増えます。

registerDefaults:を使用してデフォルト値を設定する必要があります。積極的に設定された値を保存するには、setValue:forKey:を使用する必要があります。

また、MacにはNSUserDefaultsも存在します。そこで、ユーザーはdefaultsコマンドを使用して設定に直接アクセスできるため、プログラムはこのストアを変更できる唯一のエンティティではありません。

+0

それは問題ではないと思いますが、それはひどく冗長なようです。私がデフォルトを設定して、ユーザーが好きではない場合、彼はそれらを変更することができ、変更は保存されます...そして、私はまだデフォルトを設定し続ける必要があります。同様に、ユーザーがデフォルトに満足していて、それらを保存する理由がない場合でも、デフォルトを設定し続ける必要があります。保存されたデフォルトがユーザによってオーバーライドされるため、デフォルトを保存する方が私にとっては意味があります。私はまだregisterDefaultsを使用するための堅実なケースが表示されません: – gabrielk

+0

私は欲しいデフォルトはSettings.bundle .plistファイルに保存されているので、私にとっては特に奇妙ですが、実際のデフォルトとしては使用されません選択肢を表示するときのGUI?)。 – gabrielk

+1

ストアにデフォルトを格納するコードが増えている(最初に設定済みかどうかをテストする必要があるため)ために、ストアに保存すると、将来のアップグレードや廃棄時にデフォルトを変更できなくなりますアップグレード中に設定を削除した場合は、スペースが必要です。しかし、「registerDefaults:」の開発者にとって、これは本当に最大の勝利です。 –

関連する問題