我是新的swift,我需要帮助删除集合视图单元格。在此代码中,如果indexPath为0,则删除该单元格时出错。
@IBAction func deleteItem(_ sender: Any) {
if let selectedCells = tablesCollectionView.indexPathsForSelectedItems{
let items = selectedCells.map {$0.item}.sorted().reversed()
for item in items {
tables.remove(at: item)
let tableNo: TableModel
tableNo = tables[item-1] //Thread 1: Fatal error: Index out of range
refTables = Database.database().reference().child("userInfo").child(uid!).child("tables")
refTables.child(tableNo.id!).removeValue { error,arg in
if error != nil {
print("error (error)")
}
}
}
tablesCollectionView.deleteItems(at: selectedCells)
deleteButton.isEnabled = false
}
}
我有这个消息"线程1:致命错误:索引超出范围"当我试图删除单元格与0 indexPath。
这一行
tables.remove(at: item)
在for
循环中是危险的,因为当你从数组中删除时,它的大小改变会使旧的索引出错
你需要
var toDeleteIds = [String]()
for item in items {
let tableNo = tables[item]
toDeleteIds.append(tableNo.id!)
refTables = Database.database().reference().child("userInfo").child(uid!).child("tables")
refTables.child(tableNo.id!).removeValue { error,arg in
if error != nil {
print("error (error)")
}
}
}
tables.removeAll { toDeleteIds.contains($0.id) }