委托不调用Swift协议方法

时间:2017-08-06 08:58:53

标签: ios swift delegation

由于某种原因,未在主View Controller中调用委托方法。我在这里寻找另一个答案,但没有对我有帮助。我在这里错过了什么吗? (为简单起见,我缩短了我的原始代码)

主视图控制器:

class VC: ParserDelegate {
    var dataSource = Parser()

    override func viewDidLoad() {
        super.viewDidLoad()

        dataSource.delegate = self
        dataSourse.loadAndParse()
    }

    func didReceiveDataUpdates(store: [WeatherModel]) {
        print("Delegate method triggered.")
    }

}

协议:

protocol ParserDelegate: class {
    func didReceiveDataUpdates(store: [WeatherModel])
}

我的代表班:

class Parser {
    weak var delegate: ParserDelegate?

    func loadAndParse() {
        var store = [WeatherModel]()
        // Doing something

        delegate?.didReceiveDataUpdates(store: store)
    }
}

2 个答案:

答案 0 :(得分:2)

这里正确应用了委托模式,但有一件事可能会出错:在主视图控制器中,您实例化一个新的Parser对象并将其存储在“dataSource”中:

var dataSource = Parser()

将主视图控制器设置为其代理时

dataSource.delegate = self

您的主View Controller会被通知为您刚刚创建的这个新实例的委托。这意味着:如果您的Parser()类的实例跳转到(确保使用调试器,如果确实如此)

loadAndParse()

它可能是另一个对象,所以这个解析器对象没有实际的委托。如果这是问题,您可以考虑并插入以便能够直接与此特定Parser()类进行通信。希望这会有所帮助。

答案 1 :(得分:-1)

您也可以编辑此行:

来自:

dataSource.delegate = self
dataSourse.loadAndParse()

到:

dataSource.delegate = self
dataSource.loadAndParse()