Je pensais savoir ce qui causait cette erreur, mais je n'arrive pas à comprendre ce que j'ai fait de mal.
Voici le message d'erreur complet que je reçois:
Essayez de définir un objet ne figurant pas dans la liste des propriétés ( "<BC_Person: 0x8f3c140>" ) en tant que valeur NSUserDefaults pour la clé personDataArray
J'ai une Person
classe qui je pense est conforme au NSCoding
protocole, où j'ai ces deux méthodes dans ma classe personne:
- (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;
}
À un certain moment dans l'application, le NSString
dans BC_PersonClass
est défini, et j'ai une DataSave
classe qui, je pense, gère l'encodage des propriétés dans mon BC_PersonClass
. Voici le code que j'utilise dans la 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];
}
J'espère que c'est assez de code pour vous donner une idée de ce que j'essaie de faire. Encore une fois, je sais que mon problème réside dans la façon dont j'encode mes propriétés dans ma classe BC_Person, je n'arrive pas à comprendre ce que je fais mal.
Merci pour l'aide!
that I think is conforming to the NSCoding protocol
il est super facile d'ajouter des tests unitaires pour cela, et ça vaut vraiment le coup.