【问题标题】:Swift delegates isn't workingSwift 代表不起作用
【发布时间】:2016-11-27 10:01:49
【问题描述】:

我正在尝试在两个控制器之间使用委托,但它不能正常工作

protocol saveDelegate: class {
    func saveSite()
}
class AuditSiteViewController: UIViewController {
    weak var delegate: saveDelegate?

   @IBAction func saveButton(sender: UIBarButtonItem) {
        print("Saved")
        delegate?.saveSite()
    }
}


class AuditDetailsViewController: UIViewController,  saveDelegate {
     var mainView: AuditSiteViewController?

     override func viewDidLoad() {
        super.viewDidLoad()

        mainView?.delegate = self

    }

    func saveSite() {
        print("delegated")
    }
}

它应该打印委托,但它只打印“保存”?

【问题讨论】:

  • 我正在尝试从另一个视图控制器触发保存功能,我不应该使用委托吗?还是什么?
  • 我尝试将它创建为一个实例,但我仍然一无所获,我只是在关注有关它的在线资源以使其工作,这就是我得到的,我该如何解决这个问题?如果可能的话,用代码?
  • 你有一个调试器。一个很棒的调试器。调试!

标签: ios swift delegates delegation


【解决方案1】:

您可以使用委托,但您是否调试并检查mainView 是正确的实例?

在这种情况下,我的建议是改用 NSNotification。您可以在viewDidLoad 中添加观察者并在saveButton() 上发布通知

class AuditDetailsViewController: UIViewController {

  override func viewDidLoad() {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(AuditDetailsViewController.saveSite), name: "SaveSite", object: nil)
  }
}

class AuditSiteViewController: UIViewController {

  @IBAction func saveButton(sender: UIBarButtonItem) {
    NSNotificationCenter.defaultCenter().postNotificationName("SaveSite", object: nil)
  }
}

【讨论】:

    【解决方案2】:

    在我看来只有两个可能的原因:

    首先: 在调用mainView?.delegate = self 的那一刻,mainView 为零。然后没有分配代表。在那里设置一个断点,你会看到它。

    第二: 在调用delegate?.saveSite() 的那一刻,代表为零。这可能是因为您的 AuditDetailsViewController 实例已被您或系统取消初始化。如果没有人再持有对该实例的强引用,系统将删除该实例。实现 deinit 方法并在其中设置断点以查看它何时发生。

    【讨论】:

      【解决方案3】:

      当您设置委托时,看起来 mainView 为 nil。尝试在实例化详细视图控制器时设置引用。

      无论如何,也许您想要将保存操作从 detailViewController 委托给 AuditSiteViewController 并在最后一个 VC 中处理保存。

      【讨论】:

        猜你喜欢
        • 2014-11-11
        • 1970-01-01
        • 2018-02-27
        • 2016-08-26
        • 2014-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多