Сделать пользовательский класс сериализуемым в Objective-c / iPhone? - PullRequest
15 голосов
/ 02 февраля 2010

Как я могу сделать свой собственный класс сериализуемым? Я специально хочу записать его в файл на iPhone, просто plist, а класс - простой класс экземпляра, просто NSStrings и, возможно, NSUrl.

1 Ответ

33 голосов
/ 02 февраля 2010

Вы захотите реализовать протокол NSCoding . Реализуйте initWithCoder: и encodeWithCoder: и ваш пользовательский класс будет работать с NSKeyedArchiver и NSKeyedUnarchiver.

Ваш initWithCoder: должен выглядеть так:

- (id)initWithCoder:(NSCoder *)aDecoder
{
   if(self = [super init]) // this needs to be [super initWithCoder:aDecoder] if the superclass implements NSCoding
   {
      aString = [[aDecoder decodeObjectForKey:@"aString"] retain];
      anotherString = [[aDecoder decodeObjectForKey:@"anotherString"] retain];
   }
   return self;
}

и encodeWithCoder:

- (void)encodeWithCoder:(NSCoder *)encoder
{
   // add [super encodeWithCoder:encoder] if the superclass implements NSCoding
   [encoder encodeObject:aString forKey:@"aString"];
   [encoder encodeObject:anotherString forKey:@"anotherString"];
}
...