Guardando una NSArray de objetos personalizados

He creado una subclase de UIImage (UIImageExtra) ya que quiero incluir propiedades y métodos adicionales.

Tengo una matriz que contiene instancias de esta clase personalizada. Sin embargo, cuando guardo la matriz, aparece que los datos adicionales en la clase UIImageExtra no se guardan.

UIImageExtra se ajusta a NSCoding, pero no se llama a initWithCoder ni a encodeWithCoder, ya que las declaraciones de NSLog que he agregado no se imprimen.

Mi método para guardar la matriz se ve así:

<code>- (void)saveIllustrations {
if (_illustrations == nil) {
    NSLog(@"Nil array");
    return;
}

[self createDataPath];
//Serialize the data and write to disk
NSString *illustrationsArrayPath = [_docPath stringByAppendingPathComponent:kIllustrationsFile];
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:_illustrations forKey:kIllustrationDataKey];
[archiver finishEncoding];
[data writeToFile:illustrationsArrayPath atomically: YES];
}
</code>

Y UIImageExtra tiene los siguientes métodos de delegado para guardar:

<code>    #pragma mark - NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder {
    NSLog(@"Encoding origin data!");
    [super encodeWithCoder:aCoder];
    [aCoder encodeObject:originData forKey:kOriginData];
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:(NSCoder *) aDecoder]) {
        NSLog(@"Decoding origin data");
        self.originData = [aDecoder decodeObjectForKey:kOriginData];
    }
    return self;
}
</code>

Mi código para crear la matriz en primer lugar se parece a esto (en caso de que ofrezca alguna pista)

<code>        for (NSDictionary *illustrationDict in illustrationDicts) {
        NSString *illustrationString = [illustrationDict objectForKey:@"Filename"];
        NSNumber *xCoord = [illustrationDict objectForKey:@"xCoord"];
        NSNumber *yCoord = [illustrationDict objectForKey:@"yCoord"];
        UIImageExtra *illustration = (UIImageExtra *)[UIImage imageNamed:illustrationString];

        //Scale the illustration to size it for different devices
        UIImageExtra *scaledIllustration = [illustration adjustForResolution];
        NSValue *originData = [NSValue valueWithCGPoint:CGPointMake([xCoord intValue], [yCoord intValue])];
        [scaledIllustration setOriginData:originData];
        [self.illustrations addObject:scaledIllustration];
    }
</code>

¿O simplemente voy a guardar estos datos de manera incorrecta? Muchas gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta