代理不会调用Swift协议方法
由于某种原因,委托方法在主视图控制器中未被调用。我在这里寻找另一个答案,但其中没有一个对我有帮助。我在这里错过了什么吗? (I缩短我为了简单起见原代码)代理不会调用Swift协议方法
主视图控制器:
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)
}
}
委托模式是作为在这里正确应用,但有一件事可能在这里出错:在你的主视图控制器中stantiating一个新的解析器对象并将其存储在“数据源”:
var dataSource = Parser()
和设置您的主视图控制器时,作为其代表
dataSource.delegate = self
您的主视图控制器得到通知,因为这新的实例的代表你刚创建。这意味着:如果你的分析器()类的一个实例跳进(确保与调试器,如果它实际上)
loadAndParse()
它可能是另一个对象,所以这个解析器对象没有实际的委托。如果这是这个问题,那么您可以考虑并直接与这个特定的Parser()类进行交流。希望这可以帮助。
你是绝对正确的,我只注意到由于某种原因,我创建了另一个'Parser'类,并在其上调用'loadAndParse()'。谢谢你指出。 – bohdankoshyrets
很高兴我能帮助你。 – Alienbash
您也可以编辑这行:
来自:
dataSource.delegate = self
dataSourse.loadAndParse()
到:
dataSource.delegate = self
dataSource.loadAndParse()
你检查,该'delegate'不为空? – clemens
由于某种原因,它是'nil'。但是为什么它是'无'我不明白。 – bohdankoshyrets
你是否设置了代表? – gnasher729