Speichern einer NSArray von benutzerdefinierten Objekten

Ich habe eine Unterklasse von UIImage (UIImageExtra) erstellt, da ich zusätzliche Eigenschaften und Methoden einbeziehen möchte.

Ich habe ein Array, das Instanzen dieser benutzerdefinierten Klasse enthält. Beim Speichern des Arrays werden jedoch die zusätzlichen Daten in der UIImageExtra-Klasse nicht gespeichert.

UIImageExtra entspricht NSCoding, es werden jedoch weder initWithCoder noch encodeWithCoder aufgerufen, da die von mir hinzugefügten NSLog-Anweisungen nicht gedruckt werden.

Meine Methode zum Speichern des Arrays sieht folgendermaßen aus:

<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>

Und das UIImageExtra verfügt über die folgenden Delegatmethoden zum Speichern:

<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>

Mein Code zum Erstellen des Arrays sieht zunächst so aus (für den Fall, dass er Hinweise liefert)

<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>

Oder speichere ich diese Daten nur falsch? Danke vielmals.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage