Estoy usando NSCoding para archivar/desarchivar una clase personalizada como método de persistencia de datos. Funciona bien si el objeto es una subclase de NSObject, pero también tengo objetos que son subclases de objetos personalizados. ¿Debo cambiar el método initWithCoder así como encodeWithCoder? En este momento, las propiedades que son específicas de la subclase codifican/decodifican bien, pero las propiedades que la subclase hereda de la superclase no. ¿Alguna idea? Aquí está la estructura básica:Usando NSCoding en una subclase de clase personalizada
@interface NewsItem : NSObject <NSCoding, NSCopying> {
//properties for the super class here
}
@implementation NewsItem
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:itemName forKey:kItemNameKey];
//etc etc
}
- (id)initWithCoder:(NSCoder *)coder {
if ((self = [super init]))
{
self.itemName = [coder decodeObjectForKey:kItemNameKey];
//etc etc
}
return self;
}
-(id)copyWithZone:(NSZone *)zone {
NewsItem *copy = [[[self class] allocWithZone: zone] init];
copy.itemName = [[self.itemName copy] autorelease];
//etc etc
return copy;
}
y la subclase:
@interface File : NewsItem {
NSString *fileSizeString;
//etc etc
}
@implementation File
- (void)encodeWithCoder:(NSCoder *)coder {
[super encodeWithCoder:coder]; //added this, but didn't seem to make a difference
[coder encodeObject:fileSizeString forKey:kFileSizeStringKey];
//etc etc
}
- (id)initWithCoder:(NSCoder *)coder {
if ((self = [super init]))
{
self.fileSizeString = [coder decodeObjectForKey:kFileSizeStringKey];
//etc etc
}
return self;
}
-(id)copyWithZone:(NSZone *)zone {
File *copy = (File *)[super copyWithZone:zone];
copy.fileSizeString = [[self.fileSizeString copy] autorelease];
//etc etc
return copy;
}
tengo solo una marca de verificación para dar ... y SO me dice que la suya es anterior. Gracias. –