15

How can I make my own custom class serializable? I specifically want to write it to a file on iPhone, just plist and thee class is just a simple instance class, just NSStrings and maybe a NSUrl.

ACBurk
  • 4,418
  • 4
  • 34
  • 50

1 Answers1

34

You'll want to implement the NSCoding protocol. Implement initWithCoder: and encodeWithCoder: and your custom class will work with NSKeyedArchiver and NSKeyedUnarchiver.

Your initWithCoder: should look like this:

- (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;
}

and encodeWithCoder:

- (void)encodeWithCoder:(NSCoder *)encoder
{
   // add [super encodeWithCoder:encoder] if the superclass implements NSCoding
   [encoder encodeObject:aString forKey:@"aString"];
   [encoder encodeObject:anotherString forKey:@"anotherString"];
}
FreeAsInBeer
  • 12,937
  • 5
  • 50
  • 82
  • 1
    +1 You may need to call `[super initWithCoder:aDecoder]` or `[super encodeWithCoder:encoder]` depending on what class you're subclassing. =) – Dave DeLong Feb 02 '10 at 06:19
  • I have a question about Best Practices...Should I make the class Serializable or can I leave it up to the UI developer to serialize it in any desired output? – Patricia Jun 09 '14 at 17:03