2010-02-02 2 views

Antwort

33

Sie möchten die NSCoding protocol implementieren. Implementieren Sie initWithCoder: und encodeWithCoder: und Ihre benutzerdefinierte Klasse wird mit NSKeyedArchiver und NSKeyedUnarchiver funktionieren.

Ihre initWithCoder: sollte wie folgt aussehen:

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

und 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

+1 Möglicherweise müssen Sie 'nennen [super initWithCoder: aDecoder]' oder '[super encodeWithCoder: Encoder ] 'abhängig von der Klasse, die du unterklassierst. =) –

+0

Doh! Netter Fund - behoben. –

+0

Ich habe eine Frage zu Best Practices ... Soll ich die Klasse Serialisierbar machen oder kann ich es dem UI-Entwickler überlassen, es in einer beliebigen Ausgabe zu serialisieren? – Patricia

Verwandte Themen