Sto utilizzando NSCoding per archiviare/annullare l'archiviazione di una classe personalizzata come metodo di persistenza dei dati. Funziona bene se l'oggetto è una sottoclasse di NSObject, ma ho anche oggetti che sono sottoclassi di oggetti personalizzati. Devo cambiare initWithCoder: metodo e encodeWithCoder? In questo momento, le proprietà specifiche della sottoclasse codificano/decodificano bene, ma le proprietà della sottoclasse ereditate dalla superclasse non lo fanno. qualche idea? Qui è la struttura di base:Utilizzo di NSCoding in una sottoclasse di classe personalizzata
@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;
}
e la sottoclasse:
@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;
}
Ho solo un segno di spunta da dare..e SO mi sta dicendo che il tuo è più vecchio. Grazie. –