现象:
tableview创建10个cell之后(cell中只是简单的标示数字),
然后不做任何滑动,只是点击一次按钮,删除一个cell,每个cell的idx直接从m_pIndices获取,
比如m_pIndices 中数字分别是0-9,我会按照0-9的idx依次删除每个cell,结果发现删除到一半的时候idx=6,就再也无法删除cell了
好苦啊
查看了源码:发现应该是个bug,
CCTableView中删除的代码如下:
//remove first
this->_moveCellOutOfSight(cell);
m_pIndices->erase(idx);//这里是删除已使用的cell的idx,问题就出在这里
// ;
//这里的代码是删除上面的cell之后,对其他的每个使用中的cell的idx做个减少,
//但是这里并没有针对该cell对应的m_pIndices中的索引做同步修改,
//这就导致删除m_pIndices中idx为6的cell时,m_pCellsUsed中已经找不到了(因为idx被调整了)
for (unsigned int i=m_pCellsUsed->count()-1; i > newIdx; i–) {
cell = (CCTableViewCell*)m_pCellsUsed->objectAtIndex(i);
this->_setIndexForCell(cell->getIdx()-1, cell);
}
建议: 在 setIndexForCell的时候,在这里面同步一下m_pIndices中该cell此时的idx