我的应用程序中有一个TableView,当用户点击其中一个单元格中的按钮时,Safari将在应用程序中打开,当safari解散时,应用程序将崩溃,因为我想更新tableview中的一个参数所以我需要删除所有并从Json再次附加它们但是这将需要几秒钟因此应用程序将崩溃,因为没有数据显示我使用Timer但是计时器不是很好的解决方案,因为有时它需要比计时器更多的时间所以它会再次崩溃我需要一个方法等待完成,然后做一些其他事情,如果你认为这不是一个好的解决方案,请指导我哪个解决方案有利于这个问题
这是我在应用程序中解除safari之后在我的应用程序中使用的内容(它不是所有代码,但这些代码有问题)
if let payed = dict.value(forKey: "payed"){
factorViewController.payed.removeAll()
self.factorTableView.reloadData()
factorViewController.payed.append(payed as! Int)
self.factorTableView.reloadData()
print("payed = \([payed])")
}
答案 0 :(得分:0)
尝试仅重新加载一次数据:
if let payed = dict.value(forKey: "payed") {
// Empty Array here
factorViewController.payed.removeAll()
// You are appending here, so array will not be empty
factorViewController.payed.append(payed as! Int)
// Now you can reload data
self.factorTableView.reloadData()
print("payed = \([payed])")
// Also, if this doesn't work, you can use a callback(completion handler).
}
这样,当您需要重新加载数据时,您的数组不会为空
答案 1 :(得分:0)
TableView如何工作
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return your_array.count // It returns how much cells you want in your tableview.
}
// This func defines what you wanted in your cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = dequeue_property // to dequeue your cell
your_lbl.text = your_array[indexpath.row] // as per logic
return cell
}
在你的情况下
numberOfRowsInSection
中的数组计数超过了cellForRowAt
中使用的数组,因此,您的单元格出列的索引比cellForRow
中使用的数组更多。这就是为什么没有索引和崩溃IndexOutOFRange
您有阵列问题而不是tableView Reload问题
参加参考: Swift array always give me "fatal error: Array index out of range"
答案 2 :(得分:0)
好的,这比我想象的要容易!我刚刚在我的应用程序中定义了另一个变量,当开始让Json将新数据附加到新变量,然后将新变量等于旧变量!就是这样!