3

オブジェクトの小さなコレクションに対する plist シリアライゼーション機能が気に入っています。シンプルで、ストレージが XML であるなどです。しかし、辞書に値を設定するのは面倒です。

[myDict setObject:keepThis forKey:@"ivar"];

クラスから派生したオブジェクト(または単に構造体)を使用することをお勧めします。

myObj.ivar = keepThis

...そして、コレクションにメッセージを送信してplistを取得します。この目的で使用されるクラス/構造体は、plist プリミティブに直接かつ簡単にマップできるように制限できます。たとえば、myObj を NSDictionary にマップし、ivar が plist プリミティブの 1 つになるように要件を設定できます。

誰かがすでにこのための施設を建設しましたか、それとも自分で設置する必要がありますか?

4

5 に答える 5

5

これがあなたが話していることであるかどうかはわかりませんが、Key Value Codingを使用すると、インスタンスのデータから値を含む辞書を取得したり、辞書からインスタンス データを設定したりできます

インスタンスにその属性のリストを要求する方法もありますが、これを機能させるには自分でコードを作成する必要があることがわかりました。(ただし、必要に応じて、ランタイム イントロスペクションを使用して実装することもできます。) 2011 年 1 月 2 日編集: -[NSObject attributeKeys] iOS ドキュメントには表示されなくなりました。リンクを編集して Mac のドキュメントを指すようにしましたが、これはそのプラットフォームでのみのオプションである可能性があることに注意してください。

(NSCodingプロトコルは、オブジェクト自体を保存/復元するための別の方法ですが、ストレージは XML ではなくバイナリであり、システムから求められたときに、関心のある各値を取得/配置する責任があります。)

于 2009-10-30T21:49:14.187 に答える
3

実行時にインスタンスの ivar をディクショナリに入れることについて説明しているこの SO の質問を確認することをお勧めします。

于 2009-10-30T22:22:26.960 に答える
2

興味深いプロジェクトです。Objective-C 2.0 プログラミング ガイドには、クラスのプロパティのリストを動的に取得するためのランタイム関数に関するセクションがあります。

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

NSObjectこれにより、プロパティのリストを取得して辞書に入れるメソッドを使用してカテゴリを作成するのは非常に簡単になります。

于 2009-10-30T22:00:48.020 に答える
0

このためのプロパティを使用するには、可能なキーの事前定義されたセットが必要になります。ドット構文で任意の名前を使用することはできません。これは、既知のプロパティまたは第1オペランドのアクセサーである必要がありました。したがって、これの一般的な形式はあり得ません。しかし、もしあなたがあなた自身のものを作るなら、辞書に変えることはするのと同じくらい簡単[self dictionaryWithValuesForKeys:listOfProperties]です。

于 2009-10-30T23:03:48.890 に答える
0

私はこれが他の場所に投稿されているのを見ましたが、まさに私が探していたものです。上記の答えは原材料を指していますが、ここにすべてまとめられています:http ://retaincount.com/blog/?p=7

于 2009-11-21T08:29:23.527 に答える