Iphone 引发UISegmented控件异常

Iphone 引发UISegmented控件异常,iphone,ios,objective-c,cocoa-touch,methods,Iphone,Ios,Objective C,Cocoa Touch,Methods,单击下面的按钮操作时,我得到一个异常: -[UIRoundedRectButton selectedSegmentIndex]:无法识别的选择器发送到实例0x8178b90 " (它在头文件中也初始化为-(iAction)genderBtn:(id)sender;) 我不知道是否应该以某种方式将其初始化到另一个方法中,或者不进行全局初始化。任何方法的想法都将不胜感激 - (IBAction)submitButton:(id)sender { double BAC=0; // NSS

单击下面的按钮操作时,我得到一个异常:

-[UIRoundedRectButton selectedSegmentIndex]:无法识别的选择器发送到实例0x8178b90
"

(它在头文件中也初始化为-(iAction)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];
}

错误是,尽管您认为发送方值是UISegmentedControl,但它不是。这是一个圆形的按钮。结果是,您最终向UIRoundedRectButton发送一条只有UISegmentedControl实现的消息,因此它无法识别选择器。确保此操作连接到正确类型的按钮


编辑:好的。我以前看过你的代码。我认为问题是您使用了普通的UIButton而不是UISegmentedControl,但问题似乎是您根本不应该使用sender参数

我认为您有一个UISegmentedControl供用户选择某些内容,还有一个UIButton供用户在完成选择后点击。问题是您询问发送者参数(即提交按钮)UISegmentedControl的选择状态是什么。您需要将UISegmentedControl存储在属性中,并在submit方法中使用它来获取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];
}
按下submit按钮时会调用它,并从存储在属性中的分段控件获取所选索引

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

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

将此IBOutlet挂接到分段控件并使用它。

我对iOS比较陌生,我想在submitButton操作的if语句中使用UISegmentedControl。这可能吗?我将分段控件的操作设置为“提交”按钮的视图控制器中的已发送事件,但仍然收到相同的错误。是的,确实如此。这里唯一的问题是,您发布的方法中的
sender
参数不是UISegementedControl:它是一个UIButton。动作被设置为按钮,方法确实被调用;它只是没有连接到正确类型的按钮。结果是您试图获取类型不正确的按钮的
selectedSegementIndex
,因此它会引发异常。我不知道你所说的“初始化”方法是什么,这些方法无论如何都有完全不相关的签名。也许你想要一处房产?我也不知道你评论中的最后一句话是什么意思。UIButton用于修复崩溃,但现在每次我单击这两个选项中的任何一个,它都会在单击submitButton之前显示我的alertview。请看上面。我不知道我以前的按钮有什么问题。对不起,我误解了。我编辑了我的答案。您有一个分段控件,带有一个按钮,可以提交分段控件上选择的内容,对吗?如果是这种情况,那么您不想使用sender参数;这是提交按钮,它对分段控件一无所知。您需要将分段控件存储在属性中并查询它,而不是发送者。不客气。对不起,一开始我误解了你!我建议您阅读苹果公司关于Objective-C、Xcode和Cocoa Touch的文档,并阅读一本好书。Objective-C的一个优点是,事物通常都有非常自解释的名称。例如,
sender
是发送消息的任何对象,例如您点击的按钮,或
colorWithRed:blue:green:alpha:
,返回带有您指定的RGBA值的颜色。:)