実行されていることがわかっている次のコードがあります。
ReadDelegate * del = [[ReadDelegate alloc] init];
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)(@"server.com"), port, &readStream, &writeStream);
NSInputStream * readSock = (__bridge_transfer NSInputStream*)readStream;
[readSock setDelegate:del];
[readSock scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
NSOutputStream * writeSock = (__bridge_transfer NSOutputStream*)writeStream;
[writeSock scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
NSLog(@"Open socket");
[readSock open];
[writeSock open];
[writeSock write:(uint8_t*)("request\0\0\0") maxLength:10];
while (YES) {
//I'm skipping over inconsequential stuff
}
NSLog(@"finished reading");
[readSock close];
[writeSock close];
return [del getMessage];
私の ReadDelegate クラスは次のよう@interface ReadDelegate : NSObject <NSStreamDelegate>
に宣言され、- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
. その特定の関数には、呼び出されているかどうかを確認するための print ステートメントが含まれているだけです。そうではありません。
サーバーが「request\0\0\0」メッセージを受信し、サーバーがファイルを送信しているため、接続が開かれているという事実を知っています(ファイルを正常に受信できる他の環境でテストしています)。
ただし、前述のようにReadDelegate
、最初に宣言されたオブジェクト (del) は、stream
メッセージを一度も受信しません (ストリームが開いているなど)。
デリゲートが呼び出されないのはなぜですか?