Herr Charbonneau hat die richtige Idee. Ein NSCoder
abstrahiert die spezifische Serialisierung Ihres Objekts und lässt Sie nur darüber sorgen, was serialisiert/deserialisiert werden muss. In -encodeWithCoder:
, möchten Sie vielleicht
NSAssert1([encoder allowsKeyedCoding],
@"%@ does not support sequential archiving.",
[self className]);
, da nicht alle Programmierer Schlüsselarchivierung unterstützen.
In -initWithCoder
, sollten Sie -initWithCoder:
Senden - nicht einfach -init
- zu super
vor Ihrem Objekt zu initialisieren:
self = [super initWithCoder:decoder];
if (!self) return nil;
// now use the coder to initialize your state
Alternativ kann, da das Objekt bereits im Grunde eine Eigenschaftsliste ist, Sie so etwas wie -[Person plistRepresentation]
hinzufügen :
- (NSDictionary *)plistRepresentation
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[self firstName], @"firstName",
[self lastName], @"lastName",
[NSNumber numberWithInteger:[self age]], @"age", nil];
}
Dann eine Reihe von Person
s serialisiert werden, können Sie sich die Personen verwandeln kann in ihre plistRepresentation
und dann -[NSArray writeToURL:atomically:]
verwenden. (Sie können natürlich auch die Methoden der NSProperyListSerialization
direkt beschäftigen.)
Entfernen Sie diese; s –
eigentlich ich denke, das ist nicht notwendig, es sieht einfach komisch aus hah –