创建UIPickerView NSArray越界



我试图创建一个表情符号UIPikcerView

...
- (void)viewDidLoad {
     [super viewDidLoad];
     _imageArray = @[@"👻", @"👸", @"💩", @"😘", @"🍔", @"🤖", @"🍟", @"🐼", @"🚖", @"🐷"];

     _dataArray1 = [NSMutableArray arrayWithCapacity:100];
     _dataArray2 = [NSMutableArray arrayWithCapacity:100];
     _dataArray3 = [NSMutableArray arrayWithCapacity:100];
     for(int i=0;i < 100; i++){
       [_dataArray1 addObject:[NSNumber numberWithInt:(int)(arc4random() % 10)]];
       [_dataArray2 addObject:[NSNumber numberWithInt:(int)(arc4random() % 10)]];
       [_dataArray3 addObject:[NSNumber numberWithInt:(int)(arc4random() % 10)]];
}
}
...   

在UIPickerView委托方法中:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel *pickerLabel = [[UILabel alloc]init];
//debug code
NSNumber *i = [NSNumber numberWithInt:(int)_dataArray1[row]];
if (component == 0) {
    pickerLabel.text = _imageArray[(int)_dataArray1[row]];
}else if (component == 1){
    pickerLabel.text = _imageArray[(int)_dataArray2[row]];
}else{
    pickerLabel.text = _imageArray[(int)_dataArray3[row]];
}
return pickerLabel;
}

当我运行我的代码时,控制台显示"由于未捕获的异常"NSRangeException"而终止应用程序"。我添加了一个调试代码,就像注释一样

   NSNumber *i = [NSNumber numberWithInt:(int)_dataArray1[row]];

我发现当I等于146时,应用程序崩溃了。我真的很困惑"146"来自。我还在控制台中键入了一个"po_dataArray1",_dataArray2中没有146。有人能帮我吗?

NSNumber到Int应该如下所示:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel *pickerLabel = [[UILabel alloc]init];
//debug code
NSNumber *i = [NSNumber numberWithInt:_dataArray1[row].intValue];
if (component == 0) {
    pickerLabel.text = _imageArray[_dataArray1[row].intValue];
}else if (component == 1){
    pickerLabel.text = _imageArray[_dataArray2[row].intValue];
}else{
    pickerLabel.text = _imageArray[_dataArray3[row].intValue];
}
return pickerLabel;
}

尝试

[NSNumber numberWithInt:[_dataArray1[row] intValue];

而不是

[NSNumber numberWithInt:(int)_dataArray1[row];

将NSNumber强制转换为int有时可能返回Garbage值。

最新更新