我试图创建一个表情符号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值。