Saya pikir saya tahu apa yang menyebabkan kesalahan ini, tetapi sepertinya saya tidak tahu apa yang saya lakukan salah.
Inilah pesan kesalahan lengkap yang saya dapatkan:
Mencoba menetapkan objek daftar non-properti ( "<BC_Person: 0x8f3c140>" ) sebagai nilai NSUserDefaults untuk key personDataArray kunci
Saya memiliki Person
kelas yang menurut saya sesuai dengan NSCoding
protokol, di mana saya memiliki kedua metode ini di kelas pribadi saya:
- (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;
}
Di beberapa titik di aplikasi, NSString
di BC_PersonClass
diatur, dan saya memiliki DataSave
kelas yang saya pikir menangani pengkodean properti di saya BC_PersonClass
. Berikut adalah kode yang saya gunakan dari DataSave
kelas:
- (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];
}
Saya harap ini kode yang cukup untuk memberi Anda ide tentang apa yang saya coba lakukan. Sekali lagi saya tahu masalah saya terletak pada bagaimana saya mengkodekan properti saya di kelas BC_Person saya, saya sepertinya tidak bisa mencari tahu apa yang saya lakukan meskipun salah.
Terima kasih untuk bantuannya!
that I think is conforming to the NSCoding protocol
sangat mudah untuk menambahkan pengujian unit untuk itu, dan sangat berharga.