0

/NSKeyedArchive を使用するよりも ObjC オブジェクトをシリアル化する良い方法はありますか?

別のコンピューターに配置するには、C++ std:ostream のようなオブジェクトを介してオブジェクトを配布する必要があります。

オブジェクトには、さまざまなタイプの 122 を超えるメンバーが含まれています...

[coder encodeObject: (id) forKey: @"blah"];

それらすべてのために...

少なくともそれを書き出す素敵な Perl スクリプトを持っている人はいますか? 含まれているオブジェクトが実装されているかどうかさえわかりません。つまり、オブジェクトのソースを変更できないため、これは巨大な醜い混乱に変わる可能性があります-継承して追加する必要が@interfaceあります...

それとも私は愚かですか? XML へのアーカイブは ostream をうまく通過しないため、 Apple のガイドは役に立ちません。

これを行うより良い方法はありますか?

-S!


[編集 1]
NSCoding を調べたところ、私のクラスにはジェネリックが含まれており、NSManagedObjects準拠していません<NSCoding>。[ここ][2] にあるアスペクト指向プログラミングを使用してみましたが、実行時に無限再帰が発生します。(少なくとも、104795回のコールのコールスタックがそうであると私が想定しているの[id encodeWithCoder:]は.

<NSCoding>さらに、そのメンバーはインポートされたフレームワークのオブジェクトであるため、ロード中にクラスに追加することはできません。プロトコルを単純に追加することはできません。そのため、アスペクト指向のものが機能すると考えました。

私が持っている最後の (そしてひどい) アイデアは、必要なすべてのクラスをサブクラス化し、そこにプロトコルを実装することです。私が予測できる大きな障害は、フレームワークで公開されていないクラスの NSArray がクラスに含まれている場合です。それから私は沈んでいます。

これを行うより良い方法はありますか?設計時の決定のように感じますが、この機能を追加するには遅すぎます。

ヘルプ...

PS

リンクを制限するこのスパム対策全体が最悪です。どうすれば知的な質問ができるの!?

[2]: http://davedelong.com/blog/2009/04/13/aspect-directional-programming-objective-c#comment-803

4

1 に答える 1

1

使用するNSCodingことは間違いなく正しい方法です。関連するボイラープレートをすべて入力したくない場合NSCoding(私も同意しますが、面倒です)、それを作成できるAccessorizerを参照してください。

于 2010-04-22T23:50:05.267 に答える