2

我在使用 Xcode (4.4.1) 以编程方式创建的 pickerView 中有 2 个组件

UIPickerView *picker = [[[UIPickerView alloc] init] retain];
[picker sizeToFit];
picker.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = YES;

我认为不需要转储与此pickerView 相关的所有代码,因为我知道它在哪里崩溃。

pickerView 在模拟器中就像一个魅力,但是当我在 iPhone 设备(5.1.1)中测试它时,它在以下方法中崩溃:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
  if (component == 0) return [array1 count];
  if (component == 1) {
    NSLog(@"selectedRowInComponent:%i",[pickerView selectedRowInComponent:1]); //CRASHES HERE
    return [[array2 objectAtIndex:[pickerView selectedRowInComponent:1]] count];
  }
}

它认为以下错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

正如我所说,如果在模拟器中测试(没有问题),如果在设备中测试(崩溃)!!!

4

2 回答 2

0

您确定它在您指定的行而不是它之后的行上崩溃吗?

模拟器和真实设备之间经常让人绊倒的区别在于文件系统在真实设备上区分大小写,但在模拟器中不区分大小写。如果您从文件中加载选择器的数据,并且您错误地指定了大小写,这可能会导致您的问题。我见过人们多次犯这种错误。查看array2并确保它包含您认为的内容。

于 2012-09-11T21:23:14.330 回答
0

有同样的问题......只在ios8上崩溃。奇怪的是,当我还原组件时,我遇到了这个问题。(反转 0 和 1)

将 [pickerView selectedRowInComponent:1] 替换为保存当前选定行的属性,因为存在并发问题

于 2015-07-16T15:20:31.553 回答