SORU
1 Kasım 2013, Cuma


Bir NSUserDefaults olmayan özellik listesi bir nesne olarak ayarlamayı deneyin

Bu hata neden buydu, ama neyi yanlış yaptığımı anlamaya görünmüyor olabilir bildiğimi sanıyordum.

Burada alıyorum tam hata iletisi:

Attempt to set a non-property-list object (
   "<BC_Person: 0x8f3c140>"
) as an NSUserDefaults value for key personDataArray

Kişi benim sınıfımda bu yöntemlerin her ikisi de, benim olduğum yerde NSCoding protokolüne uygun olduğunu düşündüğüm Person Dersim var:

- (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;
}

Bir noktada uygulaması, NSString BC_PersonClass ayarlanır, ve ben bir DataSave sınıf bence kullanma kodlama özellikleri benim BC_PersonClass. Burada DataSave sınıfından kullanıyorum kodu:

- (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];
}

Bu size bir fikir yapmaya çalışıyorum ne o verecek kadar kod umarım. Yine benim sorunum BC_Person sınıfımda benim özellikleri kodlama ben halimden yalan olduğunu biliyorum, ben sadece neyi yanlış yapıyorum ama anlamaya gibi olamaz.

Yardım için teşekkürler!

CEVAP
1 Kasım 2013, Cuma


Sana gönderilen kodu NSUserDefaults özel nesneler dizisi kurtarmaya çalışır. Bunu yapamazsın. NSCoding yöntemleri uygulamaya yardımcı olmuyor. Sadece NSUserDefaultsNSArray, NSDictionary, , *, *19NSStringNSData , ve NSDate gibi şeyleri saklayabilirsiniz.

NSData bazı nesne kod var gibi () dönüştürmek ve NSUserDefaults 23 *bunu saklamak gerekir. Hatta eğer gerekiyorsa NSData NSArray bir mağaza.

Geri dizi okuduğunuzda BC_Person nesneleri geri almak için NSData unarchive gerekir.

Belki de bu seni istiyor:

- (void)savePersonArrayData:(BC_Person *)personObject {
    [mutableDataArray addObject:personObject];

    NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:mutableDataArray.count];
    for (BC_Person *personObject in mutableDataArray) { 
        NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
        [archiveArray addObject:personEncodedObject];
    }

    NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
    [userData setObject:archiveArray forKey:@"personDataArray"];
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • kruno j

    kruno j

    6 Mayıs 2007
  • xCraash

    xCraash

    6 Temmuz 2012