0

下のボタンアクションをクリックすると、例外が発生します。

-[UIRoundedRectButton selectedSegmentIndex]: 認識されないセレクターがインスタンス 0x8178b90 に送信されました
'

(ヘッダーファイルでは - (IBAction)genderBtn:(id)sender; としても初期化されます)。

これを何らかの方法で別のメソッドに初期化する必要があるかどうか、またはグローバルに初期化する必要があるかどうかはわかりません。どんな方法のアイデアでも大歓迎です。

- (IBAction)submitButton:(id)sender {

  double BAC=0;

  //  NSString *weight=weightTextField.text;

  //Other variables etc.

UISegmentedControl *gender = (UISegmentedControl *)sender;


   UIButton *gender = (UIButton *)sender;


if (gender.selected == 0 ) {



} else if (gender.selected = 1){



}


UIAlertView *alertMessage = [[UIAlertView alloc] initWithTitle:@"Your Results:"
                                          message:[NSString stringWithFormat:@" Your Percentage is: "]
                                         delegate:self
                                cancelButtonTitle:@"OK"
                                otherButtonTitles:nil];

[alertMessage show];
}
4

1 に答える 1

1

エラーは、送信者の値が UISegmentedControl であると考えているが、そうではないことを示しています。UIRoundedRectButton です。その結果、UISegmentedControl のみが UIRoundedRectButton に実装するメッセージを送信することになり、セレクターを認識しません。このアクションが正しいタイプのボタンに接続されていることを確認してください。


編集:わかりました。私は前からあなたのコードを見ました。問題は、UISegmentedControl の代わりに通常の UIButton を使用したことだと思いましたが、実際には、sender 引数をまったく使用してはならないことが問題のようです。

ユーザーが何かを選択するための UISegmentedControl と、選択が完了したときにタップするための UIButton が 1 つあります。問題は、sender 引数 (送信ボタン) に UISegmentedControl の選択状態を尋ねていたことです。UISegmentedControl をプロパティに保存し、サブミット メソッドでそれを使用して selectedSegmentIndex を取得する必要があります。

- (IBAction)submitButton:(id)sender {

    double BAC=0;

    //NSString *weight=weightTextField.text;

    //Other variables etc.

    UISegmentedControl *gender = self.segmentedControl;


    if (gender.selectedSegmentIndex == 0 ) {
        //something
    } else if (gender.selectedSegmentIndex == 1){
        //something
    }

    UIAlertView *alertMessage = [[UIAlertView alloc] initWithTitle:@"Your Results:"
                                          message:[NSString stringWithFormat:@" Your Percentage is: "]
                                         delegate:self
                                cancelButtonTitle:@"OK"
                                otherButtonTitles:nil];

    [alertMessage show];
}

送信ボタンは、押されたときにこれを呼び出し、プロパティに保存されているセグメント化されたコントロールから選択されたインデックスを取得します。

@property (weak, nonatomic) IBOutlet UISegmentedControl* segmentedControl; //goes in @interface

@synthesize segmentedControl = _segmentedControl; //goes in @implementation

この IBOutlet をセグメント化されたコントロールにフックして使用します。

于 2013-01-09T20:49:18.903 に答える