Pensavo di sapere cosa stava causando questo errore, ma non riesco a capire cosa ho fatto di sbagliato.
Ecco il messaggio di errore completo che sto ricevendo:
Tentativo di impostare un oggetto elenco non di proprietà ( "<BC_Person: 0x8f3c140>" ) come valore NSUserDefaults per key personDataArray
Ho una Person
classe che penso sia conforme al NSCoding
protocollo, in cui ho entrambi questi metodi nella mia classe personale:
- (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;
}
Ad un certo punto nell'app, il NSString
in BC_PersonClass
è impostato e ho una DataSave
classe che penso stia gestendo la codifica delle proprietà nella mia BC_PersonClass
. Ecco il codice che sto usando dalla DataSave
classe:
- (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];
}
Spero che questo sia abbastanza codice per darti un'idea di ciò che sto cercando di fare. Ancora una volta so che il mio problema risiede nel modo in cui sto codificando le mie proprietà nella mia classe BC_Person, non riesco proprio a capire cosa, anche se sto sbagliando.
Grazie per l'aiuto!
that I think is conforming to the NSCoding protocol
è semplicissimo aggiungere test unitari per questo, e ne vale davvero la pena.