2017-04-19 46 views
0

我有一个UITableViewCellBEMCheckBox,我想删除时没有自来水在这里按下电池是我的代码:从的tableView删除单元格内的UITableViewCell

func didTap(_ checkBox: BEMCheckBox) { 
    let index = tableView?.indexPath(for: self) 
    MenuViewController().products.removeObject(forKey: "Product\(index!.row)") // removes the cell from the database of the tableview 
    tableView?.deleteRows(at: [index!], with: .fade) 
} 

,这里是我如何得到tableView

extension UIView { 
    func parentView<T: UIView>(of type: T.Type) -> T? { 
     guard let view = self.superview else { 
      return nil 
     } 
     return (view as? T) ?? view.parentView(of: T.self) 
    } 
} 

extension UITableViewCell { 
    var tableView: UITableView? { 
     return self.parentView(of: UITableView.self) 
    } 
} 

我得到follwing错误:

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 (2) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

+0

'MenuViewController()products.removeObject(forKey: “产品\(指数.row)”)'那是创造了一个全新的'MenuViewController'对象?你能检查对象是否被正确删除? – Larme

回答

0

它与您的数据源相关。您的数据源不会相应更新。您应该在重新加载UITableview之前检查您的数据源。这是由于数据项计数不匹配造成的。

0

你需要通知你将要修改的项数表视图:

tableView?.beginUpdates() 
// Perform the item and cell removal 
tableView?.endUpdates() 

始终确保插入/删除数据源相同数量的项目作为细胞的数量你的桌子视图。

您可以检查decoumentation here

+0

不,在这种情况下,您不需要'begin-/endUpdates'。仔细阅读文档* ...如果您希望后续**插入** s **,删除和选择操作** s ** ... *复数,这意味着**多个**操作。对于单个操作,根本不需要。 – vadian