解码对象时确定类

时间:2012-05-02 08:39:50

标签: objective-c cocoa-touch nscoder

为了处理(几个)传统通信协议,我尝试将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; 
}

我想,这不是一个非常优雅的解决方案。我想出的唯一另一种方法是“滥用”键类型信息。但是,在我的情况下,我需要密钥来确定协议中的相关对象。

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

0 个答案:

没有答案