2013-01-09 342 views
0

,我得到一個異常:UISegmented控制拋出異常

- [UIRoundedRectButton selectedSegmentIndex]:無法識別的選擇發送到實例0x8178b90;
'

(它也被初始化爲 - (IBAction爲)genderBtn:(ID)發送者;在頭文件)。

我不知道我是否應該以某種方式初始化到這一點的另一種方法或沒有或全局初始化。任何方法的想法將不勝感激。

- (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

錯誤是說,雖然你認爲發件人值是一個UISegmentedControl,事實並非如此。這是一個UIRoundedRectButton。其結果是,你最終發送給其中只有一個UISegmentedControl實現到UIRoundedRectButton的消息,因此它不能識別的選擇。確保此操作已連接到正確類型的按鈕。


編輯:好的。我從前看過你的代碼。我認爲,問題是,你用一個正常的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掛鉤到您的分段控件並使用它。

+0

我比較新的到iOS,我想在提交按鈕操作中使用UISegmentedControl中的if語句。這可能嗎?我將分段控件的操作設置爲提交按鈕的視圖控制器中的發送事件,並且仍然出現相同的錯誤。 – Klinetel

+0

是的。這裏唯一的問題是你發佈的方法中的'sender'參數不是UISegementedControl:它是一個UIButton。該動作設置爲一個按鈕,方法*會被調用;它只是沒有連接到正確的按鈕類型。結果是你試圖得到不正確類型按鈕的'selectedSegementIndex',所以它會拋出一個異常。我不知道你在說什麼,通過「初始化」具有完全不相關簽名的方法。也許你想要一個物業?我也不知道最後一句話在你的評論中意味着什麼。 – Metabble

+0

的UIButton的與固定崩潰的工作,但現在每一次我點擊任何一個選項了兩部,它顯示了點擊提交按鈕之前我alertview。請參閱上文。我不知道我以前的按鈕類型有什麼問題。 – Klinetel