2012-04-30 27 views
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

如果closeStream:方法在同一類connect:方法定義,你將不得不使用:

[ self closeStream: someStream ]; 

哪裏someStream是你需要通過NSStream對象。

self關鍵字引用類的當前實例

如果你不知道,或者是什麼意思,我建議你去看看Objective-C language basics要做/代碼任何事情之前,也許以後,complete language reference

編輯:

我可以在你的connect:方法«切換»連接基於按鈕標籤的價值你的代碼中看到。

這不是一個非常好的設計,你要知道,但你會在這裏遇到其他問題。

我想你想關閉輸入和輸出流,如有必要。
問題是,當第二次調用connect方法時,inputStreamoutputStream變量無法再訪問,因爲它們是local variables

您可能需要將它們存儲爲instance variables,以便您稍後可以參考它們。

再一次看來,你應該首先閱讀一些關於編程原理的文檔,以及一些面向對象的編程原則。
不要試圖走得太快。知識是一切的關鍵,所以從閱讀我之前提到的文檔開始。

+2

這是完整的語言規範。對於新人來說,最好從[學習目標-C:入門]開始(http://developer.apple.com/library/mac/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/)。 –

+0

你完全正確,謝謝:)更正了我的答案和你的鏈接。 – Macmade

+0

我解決了這個問題,謝謝你的回答。 –