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];
}
}
私は NSArrayencodeWithCoder:
がどのように実装されているかを無視しているので、NSCoder クラスを適切に使用するにはオーバーライドする必要があると思います。