【发布时间】:2011-02-08 08:31:19
【问题描述】:
我已按照指南 Setting Up Socket Streams 进行操作,并在课堂上有效地复制了该代码。无论我尝试什么,委托方法似乎都没有被调用。
在我的头文件中(基本上):
@interface myClass : NSObject <NSStreamDelegate> {
NSInputStream *inputStream;
NSOutputStream *outputStream;
}
- (void)connect;
@end;
连接方法:
- (void)connect {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)@"host.example.com", 1234, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
还尝试使用CFStreamCreatePairWithSocketToCFHost() 和[NSStream getStreamsToHost:port:inputStream:outputStream: - 结果完全相同。
我在connect 方法的开头设置了一个断点,遍历了每一行,每个指针都是有效的,并且似乎指向了正确的对象。
在 GDB 中,setDelegate 调用后,po [inputStream delegate] 按预期打印<myClass: 0x136380>,因此它已正确设置委托。
对于我的生活,我无法弄清楚为什么它拒绝在我的班级上调用 stream:handleEvent: 方法:
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
NSLog(@"got an event");
}
希望我错过了一些非常简单明了的东西,第二双眼睛可以发现我的错误。
提前感谢任何有耐心并花时间阅读本文的人!
【问题讨论】:
标签: objective-c nsstream