Ios 已调用协议和委托模型函数,但未运行

Ios 已调用协议和委托模型函数,但未运行,ios,swift,function,delegates,protocols,Ios,Swift,Function,Delegates,Protocols,您好,当代理在另一个视图控制器中调用某个函数时,我在运行该函数时遇到一些问题。我有两个视图控制器。目标是,当其中一个视图控制器关闭时,它将调用一个函数 以下是第一个视图控制器的代码。“A”和“B”在调试领事中打印 protocol UpdateApproachProtocol { func addApproachToEntry() } class ApproachViewController: UIViewController, UITableViewDelegate, UITable

您好,当代理在另一个视图控制器中调用某个函数时,我在运行该函数时遇到一些问题。我有两个视图控制器。目标是,当其中一个视图控制器关闭时,它将调用一个函数

以下是第一个视图控制器的代码。“A”和“B”在调试领事中打印

protocol UpdateApproachProtocol {
    func addApproachToEntry()
}

class ApproachViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
    
    var delegate: UpdateApproachProtocol?
   
    override func viewDidLoad() {
        
        super.viewDidLoad()
        title = "Add an Approach"
        tableView.delegate = self
        tableView.dataSource = self
        
        safeArea = view.layoutMarginsGuide
        setupView()
        
       
    }
    override func viewDidDisappear(_ animated: Bool) {
        LoadData.shared.approachArray.append(newApproach)
        print("A")
        delegate?.addApproachToEntry()
        print("B")
    }
   
}

下面是另一个视图控制器的代码。。。“测试”从未打印。我错过了什么

class AddEntryViewController: KeyboardViewController, SendTailToEntryProtocol  {
    
override func viewDidLoad() {

        super.viewDidLoad()
        let approachVC = ApproachViewController()
        approachVC.delegate = self
}
extension AddEntryViewController: UpdateApproachProtocol {
    func addApproachToEntry() {
        print("test")
       
    }
}
}

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
      
        if indexPath.section == 5 && indexPath.row == 0 {
            
            self.navigationController?.showDetailViewController(ApproachViewController(), sender: nil)
           
        }
    }
}

在创建
Approach视图控制器的代码中:

let approachVC = ApproachViewController()
approachVC.delegate = self
self.navigationController?.showDetailViewController(approachVC, sender: nil)
然后,将其从
viewdiload
中删除,因为它只创建
approach视图控制器
,而不执行任何操作:

let approachVC = ApproachViewController()
approachVC.delegate = self

Om
viewdiload
在第二个代码示例中,您创建了一个
approach视图控制器
,然后再也不使用它做任何事情——它立即超出范围。你没给我们看代码吗?或者这实际上不是正在显示的
ApproachViewController
实例吗?您能否详细说明
ApproachViewController
超出了范围?我调用它的唯一原因是将委托设置为视图控制器。缺少了一些代码,主要是我的UIPickerView的格式。是的-您创建了视图控制器,然后不使用它做任何事情。它永远不会出现在屏幕上。您在其上设置了委托,但这并不重要,因为用户从未与视图控制器的实例交互。我假设您已经在其他地方展示了该视图控制器(您没有向我们展示该代码),您真正想要的是将实际显示给用户的实例设置为委托。但是,同样,您没有显示足够的代码来说明应该如何进行。请编辑您的原始问题,而不是在评论中发布代码(这很难阅读)。显示创建
Approach视图控制器
和创建
AddEntryViewController
的位置。在
AddEntryViewController
上,您可以看到
approach视图控制器
何时显示在屏幕上。以及它是如何关闭并返回到
AddEntryViewController
工作的。谢谢