【发布时间】:2018-06-25 23:25:37
【问题描述】:
我正在使用声明协议的服务类。该协议由两个视图控制器实现,即DashboardVC 和DashboardDetailVC。当从DashboardVC 调用时,协议工作正常。然后在DashboardDetailVC 中也可以正常调用DashboardDetailVC 中定义的协议方法。但是,当我关闭DashboardDetailVC 并返回到DashboardVC 时,会调用DashboardDetailVC 的协议方法。我的代码是:
Service.swift
protocol DashboardDelegate {
func dashboardInfoResponse(data: [String: Any])
}
class Service {
var dashboardDelegate: DashboardDelegate?
func hitWebRequest(api: String, request: URLRequest) {
..
self.dashboardDelegate?.dashboardInfoResponse(data: dataArray)
..
}
}
DashboardVC.swift
class DashboardVC: DashboardDelegate {
override func viewDidLoad() {
super.viewDidLoad()
Service.shared().dashboardDelegate = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
Service.shared().dashboardInfo(postData: token)
}
func dashboardInfoResponse(data: [String : Any]) {
..
..
}
DashboardDetailVC.swift
class DashboardDetailVC: DashboardDelegate {
override func viewDidLoad() {
super.viewDidLoad()
Service.shared().dashboardDelegate = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
Service.shared().dashboardInfo(postData: token)
}
func dashboardInfoResponse(data: [String : Any]) {
..
..
}
当我使用
从DashboardDetailVC 回到DashboardVC 时
dismiss(animated: true, completion: nil)
调用了DashboardVC中的协议方法,但还是返回了DashboardDetailVC中的dashboardInfoResponse协议方法。
【问题讨论】:
-
可能在你dismiss detail VC之后,delegate sign没有变回来,viewDidLoad方法可能不会每次都运行,只有这个时候需要“load”作业,就是这样,delegate属性没有被覆盖根据您的需要
-
是的,这就是问题所在,thnx
标签: ios swift methods delegates protocols