具有委托关系的先前视图控制器不会采取预期的操作

时间:2017-10-11 19:40:47

标签: ios swift delegates

我有一个待办事项列表,允许用户将待办事项添加到表格视图中。在单独的视图控制器(CompletedViewController)上,用户可以看到以前完成的待办事项。

itemBarButton中有一个CompletedViewController应该允许用户清除已完成项目的列表,并清除最初的待办事项(completedThings)数组ViewController

创建CompletedViewController的实例并在ViewController.swift中设置completedTodos数组:

@IBAction func viewCompletedTapped(_ sender: Any) {
    if let vc = storyboard?.instantiateViewController(withIdentifier: "Completed") as? CompletedViewController {

        vc.completedTodos = completedThings

        navigationController?.pushViewController(vc, animated: true)
    }
}

CompletedViewController.swift中的协议:

protocol CompletedCleared {
  func didClearCompleted() 
}

点击itemBarButton

中的“清除”CompletedViewController.swift时调用的方法
 @objc func clearCompleted() {
    completedTodos = []
    tableView.reloadData()

    let vc = ViewController()

    vc.didClearCompleted()

}

符合ViewController.swift

中的协议
func didClearCompleted() {
    completedThings.removeAll()
}

这不会清除上一个视图控制器上的列表。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您忘记设置CompletedViewController的委托。在viewCompletedTapped中,在实例化视图控制器后添加此行:

vc.delegate = self

还要确保在CompletedViewController中使用此委托方法。 clearCompleted应该看起来像这样:

@objc func clearCompleted() {
    completedTodos = []
    tableView.reloadData()

    delegate?.didClearCompleted() 
}