4

モデルクラスにアーカイブ(NSCoding)プロトコルを追加したいので、メソッドencodeWithCoder:(NSCoder*)coderとの両方を実装しますinitWithCoder:(NSCoder*)coder。MyModelClassには2つのインスタンス変数(NSStringとNSImage)があるため、encodeObject:(id)object forKey:(NSString*)stringメソッドを使用してオブジェクトと特定のキーの値をエンコードします。しかし、私はエラーが発生し続けます:

*** -encodeObject:forKey: only defined for abstract class. Define -[NSArchiver encodeObject:forKey:]!

これがNSCodingメソッドの私のコードです:

- (id)initWithCoder:(NSCoder *)coder {
 [super init];
 mainPath = [[coder decodeObjectForKey:@"mainPath"] retain];
 icon = [[coder decodeObjectForKey:@"icon"] retain];

 return self;
}

- (void)encodeWithCoder:(NSCoder *)coder {
 NSLog(@"encode with coder is called");
 [coder encodeObject:mainPath forKey:@"mainPath"];
 [coder encodeObject:icon forKey:@"icon"];

}

そして、これは私が私のコントローラークラスでそれらを呼び出す方法です:

id object = [assetArray objectAtIndex: [[rows lastObject] intValue]];

 if ([object isKindOfClass:[ItemAssetModel class]])
  NSLog(@"object is correct");
 else
  return NO;

 NSData *data = [NSArchiver archivedDataWithRootObject: object];

withを変更するencodeObject:(id)obj forKey:(NSString*)strencodeObject:(id)obj、エラーは停止しますが、結果として、アーカイブされたデータはインスタンス変数値(cmiiw)をコピーしません。私はこれについて何かが恋しいですか?

ありがとう。ヘッブの法則

4

1 に答える 1

8

NSArchiver の代わりに NSKeyedArchiver を使用してみてください。

于 2010-10-08T17:03:11.293 に答える