J'utilise NSCoding pour archiver/désarchiver une classe personnalisée en tant que méthode de persistance des données. Cela fonctionne correctement si l'objet est une sous-classe de NSObject, mais j'ai également des objets qui sont des sous-classes d'objets personnalisés. Dois-je changer la méthode initWithCoder: ainsi que encoderCodeCoder? À l'heure actuelle, les propriétés spécifiques à la sous-classe codent/décodent correctement, mais les propriétés héritées de la sous-classe par la sous-classe ne le sont pas. Des pensées? Voici la structure de base:Utilisation de NSCoding sur une sous-classe de la classe personnalisée
@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;
}
et la sous-classe:
@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;
}
Je n'ai qu'une seule coche à donner ... et SO me dit que la vôtre est plus ancienne. Merci. –