我正在学习可可...... 我尝试了不同的方式来做到这一点,但我仍然处于黑色......
我的实现中有这个方法:
- (void)closeStream:(NSStream *)theStream {
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
如何在我的@synthetize中通过IBAction调用它?
- (IBAction)connect:(id)sender {
if ([[connectNOK stringValue] isEqualToString:@"Disconnected"]) {
[connectButton setTitle:@"Disconnect"];
NSString * hostFromField = [hostField stringValue];
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)hostFromField, [portField intValue], &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];
} else {
[connectButton setTitle:@"Connect"];
// I want to call this method here
}
}
答案 0 :(得分:4)
如果closeStream:
方法在同一类中定义,而不是connect:
方法,则必须使用:
[ self closeStream: someStream ];
someStream
是您需要传递的NSStream
对象。
self
关键字指的是该类的当前实例。
如果你不知道,或者它意味着什么,我建议你先尝试 Objective-C language basics ,然后再尝试/编码任何内容,或者之后,{ {3}}
修改强>
我可以在您的代码中看到您的connect:
方法«根据按钮标签的值切换»连接。
这不是一个非常好的设计,你知道,但你会遇到其他问题。
如果需要,我想你想关闭输入和输出流。
问题是,当第二次调用connect
方法时,inputStream
和outputStream
变量不再可访问,因为它们是complete language reference。
您可能需要将它们存储为local variables,以便稍后再引用它们。
再一次,你似乎应该首先阅读一些关于编程原理的文档,以及一些面向对象的编程原理。
不要试图走得太快。知识是一切的关键,所以首先阅读我之前提到的文档。