0

内部に UIPickerView があるカスタム UITableViewCell があります。それを管理するために、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 移動)。

ただし、実際の行数 (この例では 7) を返すようにnumberOfRowsInComponentを変更すると、すべてがうまく機能します。

試してみましたが、問題/解決策が見つかりません。どんな助けでも大歓迎です。前もって感謝します!

編集!@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

あなたは 2 年前にこの質問をしたので、おそらく既に解決していますが、問題はcellForRowAtIndexPath、 の値に応じて 2 つの異なる種類のセルを作成することです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 に答える