Al uw objecten moeten het NSCoding-protocol implementeren. NSCoding werkt recursief voor objecten die zouden worden opgeslagen. U hebt bijvoorbeeld 2 aangepaste klassen
@interface MyClass : NSObject {
}
@property(nonatomic, retain) NSString *myString;
@property(nonatomic, retain) MyAnotherClass *myAnotherClass;
@interface MyAnotherClass : NSObject {
}
@property(nonatomic, retain) NSNumber *myNumber;
Voor het opslaan van het object MyClass op NSUserDefaults moet u het NSCoding-protocol voor beide klassen implementeren:
Voor de eerste klas:
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.myString forKey:@"myString"];
[encoder encodeObject:self.myAnotherClass forKey:@"myAnotherClass"];
}
-(id)initWithCoder:(NSCoder *)decoder{
self = [super init];
if ( self != nil ) {
self.myString = [decoder decodeObjectForKey:@"myString"];
self.myAnotherClass = [decoder decodeObjectForKey:@"myAnotherClass"];
}
return self;
}
Voor de tweede klas:
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.myNumber forKey:@"myNumber"];
}
-(id)initWithCoder:(NSCoder *)decoder{
self = [super init];
if ( self != nil ) {
self.myNumber = [decoder decodeObjectForKey:@"myNumber"];
}
return self;
}
Let op, als uw andere klasse (hierboven MyAnotherClass) ook aangepast object heeft, dan moet dat aangepaste object ook NSCoding implementeren. Zelfs als u NSArray heeft, welke implicatie aangepaste objecten bevat, moet u NSCoding voor deze objecten implementeren.