3

私は IPhone SDK で作業しており、objective-c にはかなり慣れていません。現在、NSUserDefaults を使用して、IPhone アプリの設定を保存および復元しています。作成したクラスを保存するために、それらを辞書形式にエンコードしてから、NSdictionary を保存します。

私の問題は、妥当な方法で非値 (つまり、nil のクラス変数) をディクショナリに格納する妥当な方法が見つからないことです。より具体的に言うと、「Dog」というクラスがあり、NSString *tail-color があるとします。尻尾のない犬のクラス インスタンスを保存しようとしているとしましょう。そのインスタンスの尻尾の色は nil です。犬を辞書として保存する合理的な方法は何ですか? nil を NSdictionary に保存することはできません。@"" は良くありません。if(@"") を実行すると、@"" が true になるからです。nil のように false にしたいです。

私の質問が理にかなっていることを願っています。あなたの助けに感謝します!

4

4 に答える 4

9

そのキーに何も保存しない場合nil、 を呼び出したときに が返されますobjectForKey:。データを読み込むときに確認すればnil、それで十分でしょうか? objectsForKeys:notFoundMarker:オプションで、の代わりにデフォルト値を返すを使用できますnil

したがって、持っていない値の辞書には何も保存せず、読み取り時に欠落している値を処理するための戦略を使用してください。

を使用できますNSNullが、それは標準的な感じではありません、IMO。

于 2009-11-20T16:21:53.217 に答える
7

NSNull を使用できます。次のようにインスタンス化します。

[NSNull null]

ただし、オブジェクトを保存して復元するにはアーカイブをお勧めします。

于 2009-11-20T16:21:47.810 に答える
1

コレクション内の nil オブジェクトを表すにはNSNullを使用する必要があります

于 2009-11-20T16:22:17.540 に答える
0

最善の解決策は、あなたのケースでは「nil」の値を保存しないことです。指定されたキーの値が存在しない場合、読み取り中に辞書は「nil」を返します。

于 2009-11-20T16:26:31.483 に答える