Swift-当尝试使用segue设置代理时,代表为零且错误

时间:2019-06-30 20:15:17

标签: ios swift

好,所以基本上我正在制作食物日记应用程序,并且我在用户输入新食物的View Controller和显示所有食物概览的View Controller /之间进行协议/委托通信。饭菜。 我的协议和委托代码-

protocol NewEntryDelegate: class {
func getCalorieDataFromNewEntry(data: Int) 
}
-------
//NewEntryViewController
weak var delegate: NewEntryDelegate?
------
//OverviewViewController
func getCalorieDataFromNewEntry(data: Int) {

    totalCals += data
    defaults.set(totalCals, forKey: "totalCalories")

}

我在概述VC中有一个属性,用于存储当天食物的总热量,并且每次用户在NewEntryVC中创建新条目时,该条目的卡路里应发送回概述VC,加上目前的总数。 我对此的代码以前运行正常(NewEntryVC嵌入到其他导航控制器中,因为它以模态形式显示,我想要一个导航栏)(精简代码)-

class OverviewViewController: UIViewController, UITableViewDelegate,   
UITableViewDataSource, NewEntryDelegate {

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "goToNewEntry" {

        let navController = segue.destination as! UINavigationController
        let viewController = navController.topViewController as! NewEntryViewController
        viewController.delegate = self

    }

但是,我现在在两个视图控制器之间添加了一个新的PopUpViewController- Storyboard

现在我无法弄清楚如何从OverviewVC到达NewEntryVC的相同实例以设置委托。我尝试将OverviewController的prepare(for segue :)方法中的代码更改为navController.topViewController.presentedViewController as! NewEntryViewController

但这没用。我还尝试过将NewEntryVC设为PopUpVC的子VC,但这也不起作用。我还尝试在PopUpVC类而不是OverviewVC类中设置委托。

class PopUpNewEntryViewController: UIViewController {

if segue.identifier == "goToNewEntry" {
        let destVC = segue.destination as! NewEntryViewController
        destVC.delegate = self.navigationController.presentingViewController as? NewEntryDelegate

但还是没有运气。

我已经看过所有与此类似的帖子,但是找不到适合我问题的解决方案。我应该仍然使用协议/代理通信,还是使用Notification / Observer更好?如果有人可以提出任何建议,将不胜感激!如果您需要查看我的代码,请告诉我。

谢谢!

0 个答案:

没有答案