Я не думаю, что NSKeyedArchiver - ваша проблема, так как он не знает ни о массивах, ни о чем-либо. Возможно, вам нужно реализовать протокол NSCoding для каждого подкласса?
Edit:
Не уверен, как вы используете NSKeyedArchiver, но вот как вы должны его использовать:
NSMutableData *data = [NSMutableData new];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:array forKey:@"array"];
[data writeToFile:filename attomically:YES];
[archiver release];
[data release];
И прочитать это позже:
NSData *data = [[NSData alloc] initWithContentsOfFile:filename];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
array = [[unarchiver objectForKey:@"array"] retain];
[unarchiver release];
[data release];
Предполагается, что array
- это некоторый тип NSObject
, включая NSArray
, NSSet
, NSDictionary
и т. Д., Или любой из их изменяемых эквивалентов.