2010-10-08 2 views
3

Я хочу добавить протокол архивации (NSCoding) к моему классу модели, а затем я реализую оба метода: encodeWithCoder:(NSCoder*)coder и initWithCoder:(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 forKey:(NSString*)str с encodeObject:(id)obj, ошибка останавливается, но в результате архивные данные не копируют переменную экземпляра значение (cmiiw). Я что-то пропустил?

спасибо. hebbian

ответ

7

Попробуйте использовать NSKeyedArchiver вместо NSArchiver.

+1

Правильно, потому что вы используете методы кодирования/декодирования с ключом. –

+0

Ах, так просто, спасибо – Hebbian

+0

@Hebbian - Этот ответ решил мою проблему. Вы должны отметить его как правильный – 2011-12-21 21:30:18

 Смежные вопросы

  • Нет связанных вопросов^_^