NSInputStreamのサブクラスを作りたいと思います。単純に、次のようにコードを作成しようとしました。NSInputStreamのサブクラスを作成するにはどうすればよいですか?
@interface SeekableInputStream : NSInputStream
{
NSUInteger startOffset;
NSUInteger totalReadLen;
}
- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len;
- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len;
- (BOOL)hasBytesAvailable;
- (void)open:(NSUInteger)offset;
@end
そして、私は次のようなクラスを使用しました。
SeekableInputStream *stm = [[SeekableInputStream alloc] initWithURL:url];
次に、実行時に次のエラーメッセージが表示される可能性があります。
- [SeekableInputStream initWithURLは:]:認識されていないセレクタは、私は意図的に親のメソッドを使用するためのinitWithURLを上書きしませんでしたインスタンスに0x10018ff30
を送りました。 私の知識に基づいて、派生クラスは親クラスのメソッドを使用できますか?
initWithURLのような拡張メソッドを継承することはできませんか?
誰かがNSInputStreamのサブクラス化を行う方法を知らせていますか?
メソッド 'initWithURL'を実際に再実装しようとしましたか(試してみたことがありますか?)あなたはどのようなカテゴリをサブクラス化できないのでしょうか? – Saphrosit
@Saphrositあなたは「オーバーライド」として「再実装」を意味しますか?はいの場合は、はいと言うことができます。私はinitWithURLメソッドをオーバーライドしましたが、スーパーインスタンスにはメソッドがないため、[super initWithURL]呼び出しは失敗しました。 –
NSInputStreamは何とか "特別な"ものかもしれませんが、どこかで何か汚れてしまったことを強く疑うでしょう。たとえば、MファイルにHファイルのそのバージョンを実際に含めていません。 –