Сохранение NSArray пользовательских объектов
Я создал подкласс UIImage (UIImageExtra), так как я хочу включить дополнительные свойства и методы.
У меня есть массив, который содержит экземпляры этого пользовательского класса. Однако, когда я сохраняю массив, кажется, что дополнительные данные в классе UIImageExtra не сохраняются.
UIImageExtra соответствует NSCoding, но ни initWithCoder, ни encodeWithCoder не вызываются, поскольку добавленные мной операторы NSLog не печатаются.
Мой метод сохранения массива выглядит так:
<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>
И UIImageExtra имеет следующие методы делегата для сохранения:
<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>
Мой код для создания массива в первую очередь выглядит следующим образом (в случае, если предлагает какие-либо подсказки)
<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>
Или я просто собираюсь сохранить эти данные неправильно? Большое спасибо.