在我的SecondViewClass中,无论何时通过在ViewController中调用@objc func toReload()来单击按钮时,我都试图更新ViewController类中的单元格0。
SecondViewController代码:
@IBAction func setFav(_ sender: Any)
{
let storyboard: UIStoryboard = UIStoryboard.init(name: "toVC", bundle: nil)
let VC: ViewController = storyboard.instantiateViewController(withIdentifier: "toVC") as! ViewController
VC.toReload(rowNumber: 0)
}
ViewController codes:
@objc func toReload(rowNumber: Int){
reload = true
let indexPath = IndexPath(row: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .none)
}
每当我单击按钮时,都会给我带来线程错误
答案 0 :(得分:1)
这将创建一个新的vc,而不是实际显示的
let storyboard: UIStoryboard = UIStoryboard.init(name: "toVC", bundle: nil)
let VC: ViewController = storyboard.instantiateViewController(withIdentifier: "toVC") as! ViewController
并且在尚未加载此伪造的vc并导致nil异常的情况下访问表
VC.toReload(rowNumber: 0)
您需要一个委托var
weak var delegate:FirstVC?
当您显示SecondVc时,将其设置为
let second = //
second.delegate = self
present/push(second
然后在setFav
delegate?.toReload(rowNumber: 0)
答案 1 :(得分:0)
您可以按照@Sh_Khan所述在委托人上实现此目标,也可以更轻松地实现。
在您的SecondVC中创建
var completion:((_ index:Int)->())?
在setFav
之内称为
guard let completionCall = completion else {return}
completionCall(0)
在您创建了SecondVC实例的firstVC中,使用相同的实例进行操作
secondVCObj = { index in
let indexPath = IndexPath(row: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .none)
}