抛出UISegmentedControl异常

时间:2013-01-09 20:33:05

标签: iphone ios objective-c cocoa-touch methods

点击下面的按钮操作时,我得到一个例外:

- [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];
}

1 个答案:

答案 0 :(得分:1)

错误在于虽然您认为发件人值是UISegmentedControl,但事实并非如此。这是一个UIRoundedRectButton。结果是您最终只向UIRoundedRectButton发送只有UISegmentedControl实现的消息,因此它无法识别选择器。确保此操作已连接到正确类型的按钮。


编辑:好的。我从前看过你的代码。我认为问题是你使用了普通的UIButton而不是UISegmentedControl,但问题似乎是你不应该使用发送者参数

我认为你有一个UISegmentedControl供用户选择一些东西,一个UIButton让他们在完成选择后点击。问题是你问的是发送者参数(这是提交按钮)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挂钩到您的分段控件并使用它。