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メソッドが 2 回目に呼び出されると、inputStreamおよび変数がローカル変数outputStreamであるため、アクセスできなくなることです。

後で参照できるように、代わりにインスタンス変数として保存する必要があるでしょう。

繰り返しになりますが、プログラミングの原則とオブジェクト指向プログラミングの原則に関するドキュメントを読むことから始める必要があるようです。
速く走ろうとしないでください。知識はすべての鍵となるため、前述のドキュメントを読むことから始めてください。

于 2012-04-30T22:06:21.813 に答える