首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

deleteRowsAtIndexPaths的NSInternalInconsistencyException错误

2013-09-28 
deleteRowsAtIndexPaths的NSInternalInconsistencyException异常在表视图的行删除操作中,用deleteRowsAtIn

deleteRowsAtIndexPaths的NSInternalInconsistencyException异常

在表视图的行删除操作中,用deleteRowsAtIndexPaths方法删除一个indexPath数组时,抛出一个错误NSInternalInconsistencyException。将出错前后的代码摘录如下。

[self beginUpdates];

[self deleteRowsAtIndexPaths:@[[self indexPathForCell:cell]]withRowAnimation:UITableViewRowAnimationFade];

[self endUpdates];

[self.dsItems removeObject:_originalShpItem];

 

使用断点追踪时,发现抛错代码在endUpdates方法上。

错误信息如下:

** Terminating app due to uncaught exception'NSInternalInconsistencyException', reason: 'Unable to resolve row for indexpath:  2 indexes [0, 1]'

 

先确定一点,这个错是在对于uitableview的机制使用上不熟悉导致的,一定不是uitableview的自生问题,别动不动怀疑ios的bug。

有人这么建议的:

The table view data source needs to be consistent with yourinsert/delete calls. Set a break point in numberOfRowsInSection to assure thatthe number of rows in a section is correct after the insert/delete rows.

表视图的数据源需要和你插入或者删除的操作保持一致。在numberOfRowsInSection上做一个断点,确认插入或者删除记录后结果集总数要和deleteRowsAtIndexPaths操作一致。

通过设置numberOfRowsInSection断点,可以很清楚看到deleteRowsAtIndexPaths的执行流程,它在endUpdates之前,是要调用numberOfRowsInSection的,从而得到删除cell后的记录数。

如果这里没有beginUpdates和endUpdates的封装,那么必须在deleteRowsAtIndexPaths之前就将datasource进行删除。否则就会报这个错误。

 

至于有人提到,不用deleteRowsAtIndexPaths操作,而是使用reloaddata,全屏

热点排行