Objective-c способ сериализации массивов, которые содержат разные типы - PullRequest
1 голос
/ 11 октября 2009

Мой экземпляр NSMutableArray содержит экземпляры объектов разных типов, которые имеют общего предка. Я хочу сериализовать массив, но класс NSKeyedArchiver, похоже, в архивных массивах содержит объекты определенных типов. Есть ли простой способ сделать это с помощью стандартных серийных классов?

1 Ответ

4 голосов
/ 11 октября 2009

Я не думаю, что 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 и т. Д., Или любой из их изменяемых эквивалентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...