【发布时间】:2012-04-04 11:07:04
【问题描述】:
我想创建一个 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:]:无法识别的选择器发送到实例 0x10018ff30
我没有重写 initWithURL 来故意使用父母的方法。 据我所知,派生类可以使用父类的方法,不是吗?
不能继承像initWithURL这样的扩展方法吗?
有人告诉我如何对 NSInputStream 进行子类化吗?
【问题讨论】:
-
您是否尝试(只是尝试)重新实现方法
initWithURL? -
@Saphrosit 你的意思是“重新实现”为“覆盖”吗?如果是,我可以说是。我重写了 initWithURL 方法,但是,[super initWithURL] 调用失败,因为超级实例没有该方法。
-
这可能是 NSInputStream 不知何故是“特殊的”,但我更强烈地怀疑你在某处搞砸了。例如,您并没有真正将那个版本的 H 文件包含在 M 文件中。
-
为什么需要继承 NSInputStream?
标签: objective-c cocoa