Ich dachte, ich wüsste, was diesen Fehler verursacht, aber ich kann nicht herausfinden, was ich falsch gemacht habe.
Hier ist die vollständige Fehlermeldung, die ich erhalte:
Versuchen Sie, ein Objekt festzulegen, das keine Eigenschaftsliste ist ( "<BC_Person: 0x8f3c140>" ) als NSUserDefaults-Wert für den Schlüssel personDataArray
Ich habe eine Person
Klasse, die meiner Meinung nach dem NSCoding
Protokoll entspricht, wobei ich beide Methoden in meiner Personenklasse habe:
- (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;
}
Irgendwann in der App ist das NSString
in BC_PersonClass
festgelegt, und ich habe eine DataSave
Klasse, die meiner Meinung nach die Codierung der Eigenschaften in meinem übernimmt BC_PersonClass
. Hier ist der Code, den ich aus der DataSave
Klasse verwende:
- (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];
}
Ich hoffe, dies ist genug Code, um Ihnen eine Vorstellung davon zu geben, was ich versuche zu tun. Wieder weiß ich, dass mein Problem darin liegt, wie ich meine Eigenschaften in meiner BC_Person-Klasse codiere. Ich kann einfach nicht herausfinden, was ich falsch mache.
Danke für die Hilfe!
that I think is conforming to the NSCoding protocol
Es ist super einfach, Unit-Tests dafür hinzuzufügen, und es lohnt sich wirklich.