方法调用 - Cocoa / Obj-C

时间:2012-04-30 22:03:19

标签: objective-c macos cocoa

我正在学习可可...... 我尝试了不同的方式来做到这一点,但我仍然处于黑色......

我的实现中有这个方法:

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

1 个答案:

答案 0 :(得分:4)

如果closeStream:方法在同一类中定义,而不是connect:方法,则必须使用:

[ self closeStream: someStream ];

someStream是您需要传递的NSStream对象。

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

如果你不知道,或者它意味着什么,我建议你先尝试 Objective-C language basics ,然后再尝试/编码任何内容,或者之后,{ {3}}

修改

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

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

如果需要,我想你想关闭输入和输出流。
问题是,当第二次调用connect方法时,inputStreamoutputStream变量不再可访问,因为它们是complete language reference

您可能需要将它们存储为local variables,以便稍后再引用它们。

再一次,你似乎应该首先阅读一些关于编程原理的文档,以及一些面向对象的编程原理。
不要试图走得太快。知识是一切的关键,所以首先阅读我之前提到的文档。