上一个视图控制器与委托关系不采取预期的行动

问题描述:

我有一个待办事项列表,允许用户添加待办事项到一个表视图。在单独的视图控制器(CompletedViewController)上,用户可以看到先前完成的待办事项。上一个视图控制器与委托关系不采取预期的行动

有一个在该CompletedViewController应该允许用户清除完成的项目的列表,以及关于所述初始ViewController清除完成待办事项(completedThings)的阵列的itemBarButton。在CompletedViewController.swift

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

     vc.completedTodos = completedThings 

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

 

的协议::点击 '清除' 时

protocol CompletedCleared { 
    func didClearCompleted() 
} 

调用的方法

创建的CompletedViewController一个实例,并设置completedTodos阵列中ViewController.swiftitemBarButton in CompletedViewController.swift

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

    let vc = ViewController() 

    vc.didClearCompleted() 

} 

符合协议在ViewController.swift

func didClearCompleted() { 
    completedThings.removeAll() 
} 

这不清除以前视图控制器上的列表。我究竟做错了什么?

+1

对未来的建议。尝试在你的问题中更简洁一些,并将相关代码复制并粘贴到你的问题中。 – Slayter

+0

感谢您的提醒!未来肯定会做到这一点! –

+0

随意[添加您自己的答案](https://meta.stackexchange.com/questions/298924/etiquette-for-answering-your-own-question-with-an-answer-inspired-by-another-ans/298925#298925),如果您愿意,但请将解决方案材料留在问题主体之外。 –

你忘了设置CompletedViewController的代表。在viewCompletedTapped加入这一行实例化视图控制器后:

vc.delegate = self 

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

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

    delegate?.didClearCompleted() 
} 
+0

我已将'vc.delegate = self'添加到'viewCompletedTapped',并且当我调用'didClearCompleted'方法时该阵列仍未清除 –

+0

看起来您可能需要在清除数组后清空表视图。在'completedThings.removeAll()'后面添加'myTable.reloadData()'。 – Slayter

+0

仍然没有运气。我不认为'didClearCompleted'方法实际上是清除传递给vc的数组,我使用'viewCompletedTapped'动作初始化... –