Pensé que sabía qué estaba causando este error, pero parece que no puedo entender qué hice mal.
Aquí está el mensaje de error completo que recibo:
Intente establecer un objeto de lista que no sea de propiedad ( "<BC_Person: 0x8f3c140>" ) como un valor NSUserDefaults para personDataArray clave
Tengo una Person
clase que creo que se ajusta al NSCoding
protocolo, donde tengo ambos métodos en mi clase de persona:
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.personsName forKey:@"BCPersonsName"];
[coder encodeObject:self.personsBills forKey:@"BCPersonsBillsArray"];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
self.personsName = [coder decodeObjectForKey:@"BCPersonsName"];
self.personsBills = [coder decodeObjectForKey:@"BCPersonsBillsArray"];
}
return self;
}
En algún momento de la aplicación, se establece NSString
in BC_PersonClass
, y tengo una DataSave
clase que creo que está manejando la codificación de las propiedades en mi BC_PersonClass
. Aquí está el código que estoy usando de la DataSave
clase:
- (void)savePersonArrayData:(BC_Person *)personObject
{
// NSLog(@"name of the person %@", personObject.personsName);
[mutableDataArray addObject:personObject];
// set the temp array to the mutableData array
tempMuteArray = [NSMutableArray arrayWithArray:mutableDataArray];
// save the person object as nsData
NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
// first add the person object to the mutable array
[tempMuteArray addObject:personEncodedObject];
// NSLog(@"Objects in the array %lu", (unsigned long)mutableDataArray.count);
// now we set that data array to the mutable array for saving
dataArray = [[NSArray alloc] initWithArray:mutableDataArray];
//dataArray = [NSArray arrayWithArray:mutableDataArray];
// save the object to NS User Defaults
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:dataArray forKey:@"personDataArray"];
[userData synchronize];
}
Espero que sea suficiente código para darte una idea de lo que estoy tratando de hacer. Una vez más, sé que mi problema radica en cómo estoy codificando mis propiedades en mi clase BC_Person, parece que no puedo entender qué estoy haciendo mal.
¡Gracias por la ayuda!
that I think is conforming to the NSCoding protocol
es muy fácil agregar pruebas unitarias para eso, y realmente vale la pena.