NSOutputStreamのサブクラスを作成して、非常に単純な関数を実行しようとしています。ストリームに送信されたバイトの総数を追跡します。ただし、関数のインスタンスを初期化するときに予期しない問題が発生しています。コードは次のとおりです。
#import <Foundation/Foundation.h>
@interface TrackingOutputStream : NSOutputStream {
unsigned long long bytesWritten;
}
@property (readonly) unsigned long long bytesWritten;
@end
---------------------------
#import "TrackingOutputStream.h"
@implementation TrackingOutputStream
@synthesize bytesWritten;
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)length {
NSInteger written = [super write:buffer maxLength:length];
bytesWritten += written;
return written;
}
@end
ただし、このクラスを初期化しようとすると、次のようになります。
TrackingOutputStream *os = [[[TrackingOutputStream alloc] initToFileAtPath:@"/tmp/test" append:NO] autorelease];
次のエラーが発生します。
-[TrackingOutputStream initToFileAtPath:append:]: unrecognized selector sent to instance 0x101a187e0
superを呼び出すクラスに明示的なコンストラクターを追加しようとしましたが、違いはありません(そうではないはずです)。