2010-03-20 31 views
0

我想在同一視圖中有2個pickerviews。它除了兩件事情以外。如果一個pickerview比另一個pickerview有更多的行,那麼當從pickerview中選擇具有更多項目的項目時,應用會崩潰。我還爲pickerviews創建了一個NSLog,並且控制檯顯示我一次選擇兩個項目,實際上我只處理一個pickerview。我知道這聽起來有點混亂,但我包含了所有的代碼。先謝謝你。兩個PickerViews保存查看問題?

列表和List2是NSMutableArrays

列表中有4項 list2中有5個項目

有錯誤:

*終止應用程序由於未捕獲的異常 'NSRangeException',原因是:「* - [NSCFArray objectAtIndex:]:index(4)beyond bounds(4)'

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView{ 
    if([thePickerView isEqual:pickerView1 ]){  
     return 1; 
    } 
    else if([thePickerView isEqual:pickerView2]){ 

     return 1; 
    } 

    else{ 
     return 0; 
    } 
} 

-(NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component{ 

    if([thePickerView isEqual:pickerView1 ]){ 
     return [list count]; 
    } 
    else if([thePickerView isEqual:pickerView2]){  
     return [list2 count]; 
    } 

    else{ 
     return 0; 
    } 
} 

-(NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 

    if([thePickerView isEqual:pickerView1 ]){ 
     return [list objectAtIndex:row]; 
    } 
    else if([thePickerView isEqual:pickerView2]){  
     return [list2 objectAtIndex:row]; 
    } 

    else{ 
     return 0; 
    } 

} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    NSLog(@"Selected item %@. Index of selected item:%i", [list objectAtIndex:row], row); 
    NSLog(@"Selected item %@. Index of selected item:%i", [list2 objectAtIndex:row], row); 
    NSLog(@"Selected item %@. Index of selected item:%i", [list3 objectAtIndex:row], row); 

if([thePickerView isEqual:pickerView1 ]){ 
//Do Something 
} 
else if([thePickerView isEqual:pickerView2 ]){ 
//Do Something 
} 
else if([thePickerView isEqual:pickerView3 ]){ 
//Do Something 
} 
} 

回答

2

您的問題是在這裏:

NSLog(@"Selected item %@. Index of selected item:%i", [list objectAtIndex:row], row); 
NSLog(@"Selected item %@. Index of selected item:%i", [list2 objectAtIndex:row], row); 
NSLog(@"Selected item %@. Index of selected item:%i", [list3 objectAtIndex:row], row); 

什麼情況是,上述名單中的一個被髮送消息返回一個對象,它是出了界外。在將消息發送到日誌之前,您應該檢查來電的來源:

if([thePickerView isEqual:pickerView1 ]){ 
    NSLog(@"Selected item %@. Index of selected item:%i", [list objectAtIndex:row], row); 
    //Do Something 
} 
else if([thePickerView isEqual:pickerView2 ]){ 
    NSLog(@"Selected item %@. Index of selected item:%i", [list2 objectAtIndex:row], row); 
    //Do Something 
} 
else if([thePickerView isEqual:pickerView3 ]){ 
    NSLog(@"Selected item %@. Index of selected item:%i", [list3 objectAtIndex:row], row); 
    //Do Something 
} 
+0

我建議您學會更好地使用Xcode調試器。當您遇到這種錯誤時,調試器將幫助您準確追蹤程序失敗的代碼行。從那裏可以更容易地發現出了什麼問題 – pheelicks 2010-03-20 22:08:16