2010-10-08 103 views
3

我想歸檔(NSCoding)協議添加到我的模型類,然後我實現了這兩種方法encodeWithCoder:(NSCoder*)coderinitWithCoder:(NSCoder*)coder。 MyModelClass有2個實例變量(NSString和NSImage),所以我使用encodeObject:(id)object forKey:(NSString*)string方法來編碼對象加上特定鍵的值。但我一直得到了錯誤:NSCoding協議問題

*** -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]; 

如果我用encodeObject:(id)obj更改encodeObject:(id)obj forKey:(NSString*)str,錯誤停止,但結果是,歸檔數據不會複製實例變量值(cmiiw)。我想念這件事嗎?

謝謝。 赫賓

回答

7

嘗試使用的NSKeyedArchiver代替NSArchiver。

+1

沒錯,因爲你使用了鍵控編碼/解碼方法。 – 2010-10-08 17:06:39

+0

啊,這麼簡單,謝謝 – Hebbian 2010-10-08 17:24:18

+0

@Hebbian - 這個答案解決了我的問題。你需要把它標記爲正確的那個 – 2011-12-21 21:30:18