我有一个自定义的UITableViewCell,里面有一个UIPickerView。为了管理它,我创建了一个Subclass,我实现了UIPickerView委托和数据源方法。当我实现的cellForRowAtIndexPath像这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section==2) {
PickerCellTableViewCell *cell2=[tableView dequeueReusableCellWithIdentifier:@"pickerCell" forIndexPath:indexPath];
cell2.cellPickerInputArray=self.pickerArray;
return cell2;
}else{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"normalCell" forIndexPath:indexPath];
cell.textLabel.text=[[self.inputArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
return cell;
}
}
在子类.m文件中我有以下内容:
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return [self.cellPickerInputArray count];
}
我遇到以下问题:如果我这样离开,它会崩溃并且控制台会给我这个:
无效更新:第0部分中的行数无效 更新(7)后必须包含在现有部分中的行 等于之前该部分中包含的行数 update(0),加上或减去插入或删除的行数 该部分(0插入,0删除)和加号或减号的数量 移入或移出该部分的行(0移入,0移出)。'
但是,如果我更改 numberOfRowsInComponent :返回实际的行数(本例中为7),一切都运行良好。
我一直在尝试,但我没有看到找到问题/解决方案。任何帮助,将不胜感激。提前谢谢!
编辑!由@meda提醒我NSLoged NSLog(@"PickerInputArray count"%@",[self.cellPickerInputArray
计数]);在方法 pickerView numberOfRowsInComponent
下面:
2014-03-30 21:04:54.756 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.757 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.758 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.758 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.762 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.765 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.767 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.770 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.771 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.771 TestPickerOnTable[3498:60b] PickerInputArray count7
答案 0 :(得分:0)
从您的日志中,UIPicker
数据源中的元素数量似乎发生了变化。
当您从self.inputArray
添加或删除元素时,请务必重新加载组件,否则您将收到无效的更新错误。
重新加载选择器:
[_yourPicker reloadAllComponents]
答案 1 :(得分:0)
两年前你问过这个问题,所以你可能已经解决了这个问题,但问题是cellForRowAtIndexPath
根据IndexPath.section
的值创建了两种不同类型的单元格
if indexPath.section == 2
,您的(自定义)单元格有一个cellPickerInputArray
。否则,你的(正常)单元格没有那个,所以你的numberOfRowsInComponent
失败了,因为现在有数组来计算数量。
要解决此问题,请将numberOfRowsInComponent
更改为具有相同的if..then..else
结构:
if (indexPath.section==2) {
return [self.cellPickerInputArray count];
} else {
return <some appropriate value>;
}