Ios 已调用协议和委托模型函数,但未运行
您好,当代理在另一个视图控制器中调用某个函数时,我在运行该函数时遇到一些问题。我有两个视图控制器。目标是,当其中一个视图控制器关闭时,它将调用一个函数 以下是第一个视图控制器的代码。“A”和“B”在调试领事中打印Ios 已调用协议和委托模型函数,但未运行,ios,swift,function,delegates,protocols,Ios,Swift,Function,Delegates,Protocols,您好,当代理在另一个视图控制器中调用某个函数时,我在运行该函数时遇到一些问题。我有两个视图控制器。目标是,当其中一个视图控制器关闭时,它将调用一个函数 以下是第一个视图控制器的代码。“A”和“B”在调试领事中打印 protocol UpdateApproachProtocol { func addApproachToEntry() } class ApproachViewController: UIViewController, UITableViewDelegate, UITable
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
Omviewdiload
在第二个代码示例中,您创建了一个approach视图控制器
,然后再也不使用它做任何事情——它立即超出范围。你没给我们看代码吗?或者这实际上不是正在显示的ApproachViewController
实例吗?您能否详细说明ApproachViewController
超出了范围?我调用它的唯一原因是将委托设置为视图控制器。缺少了一些代码,主要是我的UIPickerView的格式。是的-您创建了视图控制器,然后不使用它做任何事情。它永远不会出现在屏幕上。您在其上设置了委托,但这并不重要,因为用户从未与视图控制器的实例交互。我假设您已经在其他地方展示了该视图控制器(您没有向我们展示该代码),您真正想要的是将实际显示给用户的实例设置为委托。但是,同样,您没有显示足够的代码来说明应该如何进行。请编辑您的原始问题,而不是在评论中发布代码(这很难阅读)。显示创建Approach视图控制器
和创建AddEntryViewController
的位置。在AddEntryViewController
上,您可以看到approach视图控制器
何时显示在屏幕上。以及它是如何关闭并返回到AddEntryViewController
工作的。谢谢