删除的效果
简单删除
先删除数据源里的数据,然后再删除cell,否者会报错
let indexPath = NSIndexPath.init(forRow: 1, inSection: 0)
let indexPath1 = NSIndexPath.init(forRow: 3, inSection: 0)
//title是数据源
self.titles.removeAtIndex(0)
self.titles.removeAtIndex(0)
self.tableView?.deleteRowsAtIndexPaths([indexPath,indexPath1], withRowAnimation: .Left)
```
如果先删除cell,再删除数据库,会抛出exception
self.tableView?.deleteRowsAtIndexPaths([indexPath,indexPath1], withRowAnimation: .Left)
//title是数据源
self.titles.removeAtIndex(0)
self.titles.removeAtIndex(0)
2016-07-30 21:44:26.613 UITableViewLearn[14976:575144] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (4), plus or minus the number of rows inserted or deleted from that section (0 inserted, 2 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
UIKit在调用deleteRowsAtIndexPaths
时,会判断前后数据源的一致性,如果前后不一致,会抛出异常。然而只是判断cell的个数是否一致。如果删除了第0、1列的数据,然后删除第2、3列的cell,也不会报错。
let indexPath = NSIndexPath.init(forRow: 2, inSection: 0)
let indexPath1 = NSIndexPath.init(forRow: 3, inSection: 0)
//title是数据源
self.titles.removeAtIndex(0)
self.titles.removeAtIndex(0)
self.tableView?.deleteRowsAtIndexPaths([indexPath,indexPath1], withRowAnimation: .Left)
上面的不会报错
简单插入
同样是先插入数据,再插入cell。
self.titles.insert("insert", atIndex: 1)
self.tableView?.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Left)
同时删除和插入
beginUpdates()
deleteRowsAtIndexPaths
, insertRowsAtIndexPaths:
等方法endUpdates
方法对indexPath进行操作的次序
beginUpdates()
和endUpdates
之间的部分)中,所有的插入和选择操作都发生在删除操作之后原文:http://www.cnblogs.com/huahuahu/p/UITabelview-de-shan-chu.html