2

私はObjective-Cの完全な初心者であり、PHPのバックグラウンド、BASICのさまざまな方言、およびC /C++のほんの一部から来ています。Interface Builderで基本的なウィンドウを設定するのは適切だと思いますが、テキストフィールドのコンテンツを操作するのに問題があります。特に、テキストフィールドから値を呼び出したり、値を送信したりするのに問題があります。

私は追加のない基本的なXcodeCocoaアプリケーションテンプレートを使用しており、「controller.h」と呼ばれるCocoaクラスを作成しました。Interface Builderで、Secure Textフィールド、その下にある基本的なNSTextField、およびフォームを送信するためのプッシュボタンを備えたウィンドウをまとめました。私のコントローラークラスは次のようなものです。

//controller.h
#import <Cocoa/Cocoa.h>

@interface controller {
    IBOutlet id userInput;
    IBOutlet id userOutput;
}
- (IBAction)submitButton:(id)sender;
@end

//controller.m
#import "controller.h"

@implementation controller
- (IBAction)submitButton:(id)sender {
    NSBeep();
    [userOutput setStringValue: userInput];
    [userInput setStringValue:nil];
}
@end

userInputはSecureTextフィールドにリンクされており、userOutputはNSTextFieldにリンクされています。submitButtonはプッシュボタンにリンクされています。物事がどのように機能するかについての私の理解に基づいて、これはuserInputのセキュアテキストの値をuserOutputに割り当て、それによってNSTextFieldに表示されるものを更新してから、フィールドをリセットする必要があります。ビープ音は、関数が呼び出されているかどうかを知らせるためにあります。

ただし、ビープ音は鳴りません。つまり、何も起きていません。ただし、Interface Builderはファイルを作成したので、ファイルが適切に定義され、適切な場所に接続されていることがわかります。IBActionが実行され、値が必要な場所に送信されるように修正するにはどうすればよいですか?

4

1 に答える 1

1

呼び出されているかどうかを確認するためのより効果的な方法は、ブレークポイントを設定し(エディターの左側にあるガターをダブルクリック)、代わりにアプリをデバッグすることです。最初の提案は、常に接続を健全性チェックすることです。

さらに、代わりに次の行を使用することをお勧めします。

[userOutput setStringValue:[userInput stringValue]];

(これは、NSControlから継承されていることに注意してください-stringValue。)-setStringValue:


編集:実際にコントローラーオブジェクトをインスタンス化していることを確認すると役立つ場合があります。コントローラにメソッドを追加し、-awakeFromNibそれにブレークポイントを設定して、これが当てはまるかどうかを確認できます。(http://www.cocoadev.com/index.pl?AwakeFromNibを参照してください)そのメソッドが呼び出されない場合、IBで指定された接続も確立されません。

于 2009-11-21T08:02:41.177 に答える