我正在探索子类化NSCoder
以读取/写入专有文件格式的想法。我开始相信这可能还需要我进行子类化NSArray
并NSDictionary
覆盖encodeWithCoder:
以确保它们被正确编码:
- (void)encodeWithCoder:(NSCoder *)encoder {
if ([encoder isKindOfClass:[CustomCoder class]]) {
// call [encoder encode...] as I see fit.
}else
[super encodeWithCoder:encoder];
}
我不愿意这样做,因为NSCoder
它的相关协议NSCoding
应该是自给自足的......要求遵循协议的子类化似乎是糟糕的设计。我是误会还是想多了?!?
详细说明:
例如,如果文件格式规定项目列表编码如下:
... // rest of file
0xA1 // marks the beginning of a list
0x0010 // amount of item in list. The list contains 16 items in this example.
... // encoded items follows
我想要编码一个数组,它encodeWithCoder:
需要看起来像这样:
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeValueOfObjCType:@encode(short) at:&itemCount];
for ( /*for each item of the array*/ ) {
[item encodeWithCoder:encoder];
}
}
因为我忽略了 NSArray 的encodeWithCoder:
实现方式,所以我想我必须重写它才能正确使用我的 NSCoder 类。