Objective-Cでplist-yオブジェクトをシリアル化するより良い方法はありますか?
-
22-07-2019 - |
質問
オブジェクトの小さなコレクションのplistシリアル化機能が好きです。それは単純で、ストレージはXMLなどです。しかし、辞書の設定値は面倒です:
[myDict setObject:keepThis forKey:@"ivar"];
クラス(または単なる構造体)から派生したオブジェクトを使用することをお勧めします:
myObj.ivar = keepThis
...そして、plistを取得するためにコレクションにメッセージを送信します。この目的に使用されるクラス/構造体は、plistプリミティブに直接かつ簡単にマッピングできるように制限できます。たとえば、myObjをNSDictionaryにマッピングし、plistプリミティブの1つであるようにivarに要件を設定できます。
このために誰かがすでに施設を建設しているのですか、それとも自分で転がすべきですか?
解決 5
これは他の場所に投稿されているのを見ましたが、まさに私が探していたものです。上記の答えは生の原料を指していますが、ここではすべてがまとめられています: http:// retaincount.com/blog/?p=7
他のヒント
これがあなたが何について話しているのかよくわかりませんが、 Key Value Coding は、とりわけ、インスタンスのデータから値を持つディクショナリを取得、および辞書からインスタンスデータを設定。
その属性のリストをインスタンスに要求しますが、そのためにはコードを自分で記述する必要があります。 (ただし、を使用できます。必要に応じて、ランタイムイントロスペクションを実装します。) 2011年1月2日編集: -[NSObject attributeKeys]
はiOSドキュメントに表示されなくなりました。 Macのドキュメントを指すようにリンクを編集しましたが、これはそのプラットフォームのオプションにすぎない可能性があることに注意してください。
( NSCoding
プロトコルは、オブジェクトを自分で保存/復元する別の方法ですが、ストレージはXMLではなくバイナリであり、尋ねられたときに気にする各値を取得/設定する責任がありますシステムによってそうします。)
このSOの質問では、実行時にインスタンスのivarを辞書に入れることについて説明しています。
興味深いプロジェクト。 Objective-C 2.0プログラミングガイドランタイム関数に関するセクションがあり、クラスのプロパティのリストを動的に取得します。
objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
これにより、プロパティのリストを取得してディクショナリに入れるメソッドを使用して、 NSObject
にカテゴリを作成するのが非常に簡単になります。
これにプロパティを使用するには、事前定義された一連のキーが必要です。任意の名前をドット構文で使用することはできません—既知のプロパティまたは第1オペランドのアクセサでなければなりませんでした。そのため、これの一般的な形式は存在できません。ただし、独自の辞書を作成する場合、辞書への変換は [self dictionaryWithValuesForKeys:listOfProperties]
を実行するのと同じくらい簡単です。