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.
+7
A:
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"];
}
+1 You may need to call `[super initWithCoder:aDecoder]` or `[super encodeWithCoder:encoder]` depending on what class you're subclassing. =)
Dave DeLong
2010-02-02 06:19:54
Doh! Nice find -- fixed.
2010-02-02 06:34:44