El Sr. Charbonneau tiene la idea correcta. Un NSCoder
abstrae la serialización específica de su objeto y le permite preocuparse solo por lo que necesita ser serializado/deserializado. En -encodeWithCoder:
, es posible que desee
NSAssert1([encoder allowsKeyedCoding],
@"%@ does not support sequential archiving.",
[self className]);
ya que no todos los codificadores apoyar archivado con llave.
En -initWithCoder
, que debería estar enviando -initWithCoder:
- no simplemente -init
- a super
antes de inicializar el objeto:
self = [super initWithCoder:decoder];
if (!self) return nil;
// now use the coder to initialize your state
alternativa, ya que su objeto es básicamente una lista de propiedades ya, se puede añadir algo como -[Person plistRepresentation]
:
- (NSDictionary *)plistRepresentation
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[self firstName], @"firstName",
[self lastName], @"lastName",
[NSNumber numberWithInteger:[self age]], @"age", nil];
}
Entonces, para serializar una serie de Person
s, se puede transformar a sí mismo en las personas su plistRepresentation
y luego use -[NSArray writeToURL:atomically:]
. (Por supuesto, puede también emplear los métodos de NSProperyListSerialization
directamente.)
eliminar de;; –
en realidad supongo que no es necesario, se ve raro jaja –