나는이 오류의 원인을 알고 있다고 생각했지만 내가 뭘 잘못했는지 알 수없는 것 같습니다.
내가받는 전체 오류 메시지는 다음과 같습니다.
속성 목록이 아닌 개체를 설정하려고합니다 ( "<BC_Person : 0x8f3c140>" )를 키 personDataArray에 대한 NSUserDefaults 값으로
나는이 Person
난에 부합되는 생각 클래스 NSCoding
내 사람 클래스에서 이러한 방법 모두이 프로토콜을 :
- (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;
}
응용 프로그램의 어떤 시점에서, NSString
에서이 BC_PersonClass
설정하고, 나는이되어 DataSave
나는 내에서 속성을 인코딩 처리하는 생각 클래스를 BC_PersonClass
. DataSave
클래스 에서 사용중인 코드는 다음과 같습니다 .
- (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];
}
이것이 내가하려는 일에 대한 아이디어를 줄 수있는 충분한 코드이기를 바랍니다. 다시 한 번 BC_Person 클래스에서 내 속성을 인코딩하는 방법에 문제가 있다는 것을 알고 있습니다. 내가 잘못하고있는 것을 파악할 수는 없습니다.
도와 주셔서 감사합니다!
that I think is conforming to the NSCoding protocol
이를 위해 단위 테스트를 추가하는 것은 매우 쉽고 실제로 가치가 있습니다.