由于某种原因,未在主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)
}
}
答案 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()