0

我正在学习可可...我尝试了不同的方法来做到这一点,但我仍然处于亏损状态...

我的实现中有这个方法:

- (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   
        }
    }
4

1 回答 1

4

如果该方法与该方法在同一个类closeStream:中定义,则必须使用:connect:

[ self closeStream: someStream ];

您需要传递someStream的对象在哪里。NSStream

self关键字是指类的当前实例

如果您不知道它或它的含义,我建议您在尝试做/编码任何事情之前先看一下Objective-C 语言基础知识,也许之后看完整的语言参考

编辑:

我可以在您的代码中看到您的connect:方法根据按钮标签的值“切换”连接。

这不是一个很好的设计,你知道,但你会在这里遇到其他问题。

我猜你想在必要时关闭输入和输出流。
问题是,当connect第二次调用该方法时,inputStreamoutputStream变量​​不再可访问,因为它们是局部变量

您可能需要将它们存储为实例变量,以便稍后引用它们。

再一次,看起来你真的应该从阅读一些关于编程原则的文档开始,以及一些面向对象的编程原则。
不要试图走得太快。知识是一切的关键,所以从阅读我之前提到的文档开始。

于 2012-04-30T22:06:21.813 回答