2014-01-08 2 views
1

Я пытаюсь декодировать свой объект из NSUserdefaults. Если я отлаживаю функцию initWithCoder, она выполняется нормально, но когда я смотрю на мой объект, который был декодирован, все свойства равны нулю.Невозможно декодировать объект из NSUserDefaults

Моя initWithCoder функция:

-(id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     //decode the properties 
     self.SGTIN = [decoder decodeObjectForKey:@"SGTIN"]; 
     self.GTIN = [decoder decodeObjectForKey:@"GTIN"]; 
     self.SerialNumber = [decoder decodeObjectForKey:@"SerialNumber"]; 
     self.Product = [decoder decodeObjectForKey:@"Product"]; 
     self.DateTimeScanned = [decoder decodeObjectForKey:@"DateTimeScanned"]; 
     self.Loaded = [decoder decodeBoolForKey:@"Loaded"]; 
    } 
    return self; 
} 

Мой код для декодирования объекта: NSDictionary * tempDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];

  NSArray *tempArray =[tempDictionary allKeys]; 

      for (NSString *key in tempArray){ 
       if ([key length] > 8) { 
        if ([[key substringToIndex:8] isEqualToString:@"INXITEM:"]) { 

         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

         NSData *encodedObject = [defaults objectForKey:key]; 

         ScannedItem *SITemp = (ScannedItem *)[NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; 
        } 
       } 
      } 

Просто нашел ...

Это потому, что свойство Loaded (BOOL) новое свойство и объект, который был сохранен в NSUserDefaults не содержит это имущество.

прочистила NSUserDefaults и теперь все в порядке ...

+0

Что такое суперкласс 'ScannedItem'. Когда и как вы кодируете экземпляры? Вы правильно использовали кодировку? – Wain

ответ

0

Вы не вызывая правильный метод суперкласса.

Это должно быть

self = [super initWithCoder:decoder]; 
+0

Это зависит от того, что суперкласс ... – Wain

0

Попробуйте использовать - (void)encodeWithCoder:(NSCoder *)coder метод в ScannedItem классе объектов

- (void)encodeWithCoder:(NSCoder *)coder { 

    [coder encodeObject:self.SGTIN forKey:@"SGTIN"]; 
    //encode all properties 
} 
Смежные вопросы