【发布时间】:2014-08-14 02:38:54
【问题描述】:
我有以下代码,我知道它正在运行:
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”消息并且服务器正在发送文件(我在其他可以接收文件的环境中进行了测试很好)。
但是,如前所述,在开头 (del) 中声明的 ReadDelegate 对象永远不会收到 stream 消息,即使是一次(表示流已打开或其他)。
为什么没有调用委托?
【问题讨论】:
标签: objective-c cocoa nsinputstream