【问题标题】:NSCoder and custom typesNSCoder 和自定义类型
【发布时间】:2010-10-27 03:26:33
【问题描述】:

如何使用 NSCoder 对自定义类型进行编码和解码?

例如,您将如何将 NSCoder 与“STATE”的实例一起使用,其中:

typedef enum { ON, OFF } STATE;

【问题讨论】:

    标签: types nscoder


    【解决方案1】:

    您可以将它们视为整数,因为它们是隐式分配的整数值:

    - (void) encodeWithCoder: (NSCoder *)coder {
      ...
      [coder encodeInt:type forKey:@"state"];
    }
    
    - (id) initWithCoder: (NSCoder *)coder {
      ...
      state = [coder decodeIntForKey:@"state"];
    }
    

    【讨论】:

    • 除非在枚举内部改变顺序会破坏编码。
    • 你把这些方法放在什么类?它们是类型,而不是对象...NSKeyedArchiver?
    • 为了支持实例的编码和解码,一个类必须采用 NSCoding 协议并实现它的方法。正在编码或解码的对象负责对其状态进行编码和解码。
    • 您可以编码一个额外的“objectVersion”标识符,以说明随着对象体系结构的发展可能以枚举顺序出现的差异。枚举也已签名,因此您可以挤入负值,这在某些情况下可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多