确定类而解码对象(Determine class while decoding object)

2019-09-16 23:09发布

对于处理(一对夫妇)传统通信协议我尝试继承NSCoder 。 虽然编码工作正常,我有解码一些问题:该协议不保留任何类型的信息,但接收机“知道”的消息的结构。 不知,解码器可如何确定哪一个类中的对象(属性)属于。

对于C类型的,这是不是一个真正的问题,因为一个可以调用decodeIntFromKey等,但对于一个对象必须调用decodeObjectdecodeObjectForKey: 该文件告诉,这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; 
}

我想,这是不是一个非常优雅的解决方案。 我想出的唯一的另一种方式是“滥用”的类型信息的关键。 然而,在我来说,我需要的关键,以确定该协议所涉及的对象。

因此,我的问题:是否有针对解码器的一种优雅的方式来确定物体的解码类型,例如,通过回调所属对象?

文章来源: Determine class while decoding object