4

NSCoder のサブクラスを作成しようとしていますが、どこから始めればよいかわかりません。Apple のドキュメントには、必要なメソッドがリストされていますが、それ以外はあまりありません。私のGoogle-fuが弱いのかもしれませんが、どこにも実装例が見つかりませんencodeValueOfObjCType:at:。(ただし、多くのケースが含まれると思います。)

私が見ることができる NSCoder のサンプル サブクラスを知っている人はいencodeValueOfObjCType:at:ますdecodeValueOfObjCType:at:か?

4

2 に答える 2

2

ここNSCoderでサブクラスをオープンソース化したところです。 これは基本的に非推奨の のレプリカです。この質問に出くわした人は誰でも始める必要があります。NSArchiver

于 2014-01-06T11:22:53.233 に答える
1

また、NSCoderを(ab)使用して、NSKeyedArchiverが生成するものよりも単純なXMLを生成したいと考えており、そのためのいくつかのクラスを実装しています。クラスはRWPlainXMLTreeEncoderおよびRWPlainXMLTreeDecoderと呼ばれ、それらのテストコードもいくつか作成しました

RWPlainXMLTreeEncoderは、エンコードしているオブジェクトグラフがツリーであると想定します(同じオブジェクトが2回エンコードされた場合、デコードされたツリーには1つの共有コピーではなく2つの異なるコピーが含まれます。閉路グラフをエンコードしようとすると、例外が発生します) 。エンコードされたオブジェクトごとに、この例のXML要素とほぼ同じように見えるXML要素を生成します。これは、文字列「Astring」を含む配列のエンコードです。

<ROOT type="@NSArray"><NS.object.0 type="@NSString"><NS.bytes>4120737472696E67</NS.bytes></NS.object.0></ROOT>

encodeWithCoder:配列や文字列などのオブジェクトに対してオブジェクト自体の代わりに別のメソッドを使用して上記をさらに改善したかったので、上記は次のようになります。

<ROOT type="array"><item.0 type="string">A string</item.0></array></ROOT>

しかし、私がこれに取り組み続けるかどうかはわかりません。encodeWithCoder:私の全体的な目標は、NSKeyedArchiverを使用する場合ほどココアに依存しないファイルを作成しながら、オブジェクトツリーをファイルに保存するためのかなり一般的で簡単な方法を用意することでした。これにより、他の人が他のプラットフォームでそれらのファイルを開くアプリケーションを作成できるようになります。

しかし、とにかくすでに進んでいる可能性のある同様の取り組みが行われていることを理解しました。さらに、XMLはドキュメントのマークアップ言語であるため、最適なターゲット形式ではなく、一部の非マークアップ言語の方が適している可能性があります。

それでも、これを続行したい場合、またはかなり単純なNSCoderサブクラスを調べる他の理由がある場合は、私のコードを自由に使用してください。MAKeyedArchiverもご覧ください。ああ、私のコードはBSDスタイルのライセンスでカバーされています(少なくともSVNリビジョン424にあるバージョンは、将来のバージョンでこれを変更する可能性があります)。改善とフィードバックを歓迎します。

于 2010-04-01T15:07:18.793 に答える