iphone - 保存 View 问题中的两个 PickerViews?

标签 iphone uiview sdk crash uipickerview

我试图在同一个 View 中有 2 个选择器 View 。它的工作原理除了两件事。如果一个选择器 View 的行数多于另一个,则应用程序在从具有更多项目的选择器 View 中选择一个项目时会崩溃。我还为pickerviews 创建了一个NSLog,控制台显示我一次选择了两个项目,而实际上我只处理一个pickerview。我知道这听起来有点令人困惑,但我包含了所有代码。先感谢您。

list 和 list2 是 NSMutableArrays

列表有 4 项
list2 有 5 个项目

有错误:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[NSCFArray objectAtIndex:]: 索引 (4) 越界 (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
}
}

最佳答案

你的问题在这里:

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
}

关于iphone - 保存 View 问题中的两个 PickerViews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2484858/

相关文章:

ios - 通过属性在 UIViewController 和 UIView 之间传递数据是零吗?

sdk - typedef INT_PTR 和 LONG_PTR 问题

ios - Facebook iOS SDK 通过应用请求传递参数

iphone - 如何在 iOS 6 上管理 AdMob 行为?

ios - 有没有办法比较CGPoints?

iphone - XCode 引用类型 - 相对于项目

iphone - audioPlayerDidFinishPlaying如何知道哪个文件完成了?

ios - 以编程方式更改 UIView 元素的所有颜色的优化方法

ios - 无法从 SuperView 中删除自定义 UIView

iphone - UISearchBar 在添加多个空格后画上句号