对于处理(一对夫妇)传统通信协议我尝试继承NSCoder
。 虽然编码工作正常,我有解码一些问题:该协议不保留任何类型的信息,但接收机“知道”的消息的结构。 不知,解码器可如何确定哪一个类中的对象(属性)属于。
对于C类型的,这是不是一个真正的问题,因为一个可以调用decodeIntFromKey
等,但对于一个对象必须调用decodeObject
或decodeObjectForKey:
该文件告诉,这NSCoder
的实现调用decodeValueOfObjCType:at:
,即它知道的类型。 也许这个信息被存储在归档中,等等。 但事实并非如此在我的情况。
现在,我说的是编码器是什么类的下一个属性:
-(id)initWithCoder:(NSCoder *)aDecoder{
if ([super init] != nil) {
[aDecoder nextClass:[propertyA class]];
[self setProperyA: [aDecoder decodeObjectForKey:kKeyPropA]];
[aDecoder nextClass:[propertyB class]];
[self setProperyB: [aDecoder decodeObjectForKey:kKeyPropB]];
// etc.
}
return self;
}
我想,这是不是一个非常优雅的解决方案。 我想出的唯一的另一种方式是“滥用”的类型信息的关键。 然而,在我来说,我需要的关键,以确定该协议所涉及的对象。
因此,我的问题:是否有针对解码器的一种优雅的方式来确定物体的解码类型,例如,通过回调所属对象?