Il signor Charbonneau ha l'idea giusta. Un NSCoder
astrae la serializzazione specifica del tuo oggetto e ti lascia preoccupare solo di ciò che deve essere serializzato/deserializzato. In -encodeWithCoder:
, si potrebbe desiderare di
NSAssert1([encoder allowsKeyedCoding],
@"%@ does not support sequential archiving.",
[self className]);
come non tutti i programmatori supportano l'archiviazione con chiave.
In -initWithCoder
, si dovrebbe trasmettere -initWithCoder:
- non semplicemente -init
- a super
prima di inizializzare l'oggetto:
self = [super initWithCoder:decoder];
if (!self) return nil;
// now use the coder to initialize your state
In alternativa, dal momento che l'oggetto è fondamentalmente un elenco di proprietà già, è possibile aggiungere qualcosa di simile -[Person plistRepresentation]
:
- (NSDictionary *)plistRepresentation
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[self firstName], @"firstName",
[self lastName], @"lastName",
[NSNumber numberWithInteger:[self age]], @"age", nil];
}
Poi, per serializzare una serie di Person
s, lei stesso può trasformare le persone in loro plistRepresentation
e quindi utilizzare -[NSArray writeToURL:atomically:]
. (Ovviamente si può anche utilizzare i metodi di NSProperyListSerialization
direttamente.)
fonte
2009-05-04 12:44:43
rimuovere quelli; 's –
in realtà credo che non è necessario, sembra solo strano hah –