2013-06-06 3 views
-3

У меня есть массив объектов (пользовательского объекта), это называется «любимым», и когда я пытаюсь сохранить этот массив в NSUserDefault я эта ошибкаIOS: хранить в NSUSerdefault массив объекта

мой код:

внутри любимой -> (object1, object2, object3 ...) из класса MyObject

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSData* myClassArrayData = [NSKeyedArchiver archivedDataWithRootObject:favorite]; 
    [defaults setObject:myClassArrayData forKey:@"favorite"]; 

моя ошибка:

[MyObject encodeWithCoder:]: unrecognized selector sent to instance 

Почему?

+1

http://stackoverflow.com/questions/4317164/save-own-class-with-nscoder http://stackoverflow.com/questions/1659922/ converting-a-nsobject-in-nsdata – Mar0ux

ответ

4

Чтобы сохранить пользовательский объект, MyObject в вашем случае, класс должен реализовать интерфейс NSCoder.

Интерфейс имеет только два метода:

- (id) initWithCoder:(NSCoder *)aDecoder { 
    self = [super init]; 

    if (self) { 

     self.identifier = [aDecoder decodeIntegerForKey:@"identifier"]; 
     self.name = [aDecoder decodeObjectForKey:@"name"]; 
     /* continue with all the properties that need to be restored */ 

    } 

    return self; 
} 

- (void) encodeWithCoder:(NSCoder *)aCoder { 
    [aCoder encodeInteger:self.identifier forKey:@"identifier"]; 
    [aCoder encodeObject:self.name forKey:@"name"]; 
    /* continue with all the properties that need to be saved */ 
} 
+0

Это проблема компиляции. Это не вызвало бы непризнанный селектор, отправленный на экземпляр ошибки во время выполнения. –

+2

. При ошибке указывается, что 'MyObject' не распознает' encodeWithCoder: ', который является одним из двух методов, которые вам нужно реализовать, чтобы вы соответствовали классу интерфейс NSCoder. – rckoenes

+0

Да, вам необходимо предоставить методы. Указывает ли вы, что ваш объект соответствует протоколу, имеет значение только при компиляции. –

Смежные вопросы