Come posso rendere serializzabile la mia classe personalizzata? Voglio specificamente scriverlo su un file su iPhone, solo plist e la classe te è solo una semplice classe di istanza, solo NSStrings e forse una NSUrl.Crea una classe personalizzata serializzabile in Objective-c/iPhone?
15
A
risposta
33
Dovrai implementare lo NSCoding protocol. Implementa initWithCoder: e encodeWithCoder: e la tua classe personalizzata funzionerà con NSKeyedArchiver e NSKeyedUnarchiver.
tuo initWithCoder: dovrebbe essere simile a questo:
- (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;
}
e 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 Potrebbe essere necessario chiamare '[initWithCoder super: aDecoder]' o '[super encodeWithCoder: encoder ] a seconda di quale classe stai sottoclassi. =) –
Doh! Bella scoperta - risolto. –
Ho una domanda sulle migliori pratiche ... Devo rendere la classe serializzabile o posso lasciarlo allo sviluppatore dell'interfaccia utente per serializzarlo in qualsiasi output desiderato? – Patricia