0

我有一个自定义 UITableViewCell ,里面有一个 UIPickerView 。为了管理它,我创建了一个子类,在其中实现了 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) 必须等于更新前该节中包含的行数 (0),加上或减去数字从该部分插入或删除的行数(0 插入,0 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。

但是,如果我更改numberOfRowsInComponent : 以返回实际的行数(在此示例中为 7),则一切正常。

我一直在尝试,但找不到问题/解决方案。任何帮助,将不胜感激。提前致谢!

编辑!正如@meda I NSLoged NSLog(@"PickerInputArray count"%@",[self.cellPickerInputArraycount 所建议的那样]);在方法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
4

2 回答 2

0

UIPicker从您的日志中,您的数据源中的元素数量似乎发生了变化。

当您添加或删除元素时,请self.inputArray 始终确保重新加载组件,否则您将收到无效更新错误。

重新加载选择器:

[_yourPicker reloadAllComponents]
于 2014-03-30T22:32:31.980 回答
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>;
}
于 2016-11-28T19:33:47.957 回答