0

オブジェクトを保存するためにNSKeyedArchiver/NSKeyedUnarchiverを使用すると問題が発生します。
メソッド- (id)initWithCoder:(NSCoder *)decoderとを追加しました- (void)encodeWithCoder:(NSCoder *)encoder。問題は、オブジェクトを保存しようとすると正しく機能しないことです。
私は問題を想像することができました(しかし、それが問題であるかどうかはわかりません;))。オブジェクト内にいくつかの配列があります。それらにはより多くのオブジェクトが含まれています(私は「Coder」-メソッドの両方を実装しました)。では、配列はそのオブジェクトのメソッドを呼び出しますか?

可能な解決策はありますか?

ありがとう!!

4

1 に答える 1

5

ヘッダーファイルで、クラスが次のNSCodingようなプロトコルを実装することを示します<NSCoding>

このencodeWithCoderメソッドでは、保存するすべてのフィールドを次のようにエンコードする必要があります。

[encoder encodeObject:array1 forKey:@"array1"];

次に、initWithCoderメソッドで、エンコードされたフィールドをデコードします。

array1 = [coder decodeObjectForKey:@"array1"];

NSCodingエンコードされたコンテナには、プロトコルも実装するオブジェクトのみが含まれていることを確認してください。これは、、、、などのコアクラス、NSStringおよび独自のカスタムオブジェクトである可能性があります。NSNumberNSArrayNSDictionary

プロジェクトでガベージコレクションを使用していない場合は、次のようにアーカイブから取得したデータを保持またはコピーする必要があります。

array1 = [[coder decodeObjectForKey:@"array1"] retain];
于 2010-09-04T23:03:51.100 に答える