モデルクラスにアーカイブ(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*)str
とencodeObject:(id)obj
、エラーは停止しますが、結果として、アーカイブされたデータはインスタンス変数値(cmiiw)をコピーしません。私はこれについて何かが恋しいですか?
ありがとう。ヘッブの法則