Я пытаюсь реализовать методы NSCoder encodeWithCoder и initWithCoder для пользовательского объекта, который я создал, который имеет дочерний массив пользовательских объектов. Оба пользовательских объекта, использующих вышеупомянутые методы, но после того, как объект верхнего уровня был декодирован, значение для массива всегда равно нулю.NSCoder не работает с NSArray
Оба объекта реализуют методы, приведенные ниже, словарь и массивы или популярны из библиотеки, которую я получаю для получения имен полей и превращения объектов в словари. Я проверил, что encodeObject вызывается в массиве, и в это время массив не равен нулю. Я также проверил, что метод декодирования принимает ноль с другой стороны.
Я не могу решить, где я иду не так? Правильно ли я предполагаю, что до тех пор, пока объекты дочернего массива реализуют протокол, я должен быть в порядке, чтобы сделать это таким образом?
- (void)encodeWithCoder:(NSCoder *)aCoder{
NSDictionary* dictionary = [jrModelBinder unBind:self];
for(NSString* field in dictionary)
{
id val = [self valueForKey:field];
[aCoder encodeObject:val forKey:field];
}
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super init]){
NSArray* fields = [jrModelBinder propertyNames:self];
for(NSString* field in fields)
{
id val = [aDecoder decodeObjectForKey:field];
[self setValue:val forKey:field];
}
}
return self;
}
Не забудьте вызвать '[super initWithCoder:]' в 'initWithCoder'. – quellish
NSObject не реализует initWithCoder? –
Это не было указано в вашем вопросе – quellish