删除项目在tableView通过删除项目从阵列崩溃与致命错误:索引超出范围
我想从一个公共静态数组中删除项目已显示在tableview中。缺失在不同的视图 - 控制存在的,当我试图进入该视图控制器的错误“索引超出范围”删除项目在tableView通过删除项目从阵列崩溃与致命错误:索引超出范围
应用程序崩溃这是我删除的项目
func removeItem (info:Dictionary<String, Any>){
let stringKey = info[KEYS.stringKey] as! String
for var i in 0 ..< ItemsViewController.itemVideosList.count {
let current = ItemsViewController.itemVideosList[i]
let currentStringKey = current[KEYS.stringKey] as! String
if stringKey == currentStringKey {
ItemsViewController.itemVideosList.remove(at: i)
return
}
}
我打电话上的按钮这种方法请点击:
@IBAction func FavoriteAction(_ sender: Any) {
if Flag {
removeFromFavorite(info: songInfo)
Flag = false
}
else {
ItemsViewController.itemVideosList.insert(songInfo, at: 0)
favFlag = true
}
}
我在填充“ItemsViewController” viewDidLoad中的表视图用这种方法
func loadItems() {
DispatchQueue.main.async {
self.itemsTableView.reloadData()
}
}
谢谢
您正试图循环删除时。这会导致ItemsViewController.itemVideosList.count在删除后无效。
-
你可以简单地通过增加休息,而不是返回
if stringKey == currentStringKey { ItemsViewController.itemVideosList.remove(at: i) return }
-
的更重要的是解决问题,而迭代它,你不应该修改的集合。这会导致不希望的副作用。最好只存储indexToDelete,然后在循环外删除它。
func removeItem (info:Dictionary<String, Any>){ let indexToRemove = -1 let stringKey = info[KEYS.stringKey] as! String for var i in 0 ..< ItemsViewController.itemVideosList.count { let current = ItemsViewController.itemVideosList[i] let currentStringKey = current[KEYS.stringKey] as! String if stringKey == currentStringKey { indexToDelete = i break } } ItemsViewController.itemVideosList.remove(at: indexToDelete) }
注意:删除后
var list = ["a", "b", "c"]
let index = list.index { (str) -> Bool in
if str == "b" {
return true
}
return false
}
表的引用我认为问题是当我重新加载tableview。 (即使你的回答对我也很重要)。 我添加的打印显示该项目被删除,但当我尝试重新进入视图控制器它崩溃。 –
@IttaiOren删除后,你在同一控制器或执行一些赛格? –
@Tushar Sharma我在同一个控制器上。删除操作将删除静态列表中的项目,并且当用户选择转到该控制器时,该列表将填充表格视图 –
重装表:
你可以使用像这样的高阶函数让你的迭代清洁。尽管如此,问题也可能是其他问题。 –
我在哪里重新加载表?我不能得到从删除方法 –