由于某种原因,委托方法未在主视图控制器中调用。我在这里寻找另一个答案,但没有一个对我有帮助。我在这里错过了什么吗?(为了简单起见,我缩短了原始代码(
主视图控制器:
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)
}
}
委托模式在这里被正确应用,但这里有一件事可能会出错:在你的主视图控制器中,你正在实例化一个新的解析器对象,并将其存储在"数据源"中:
var dataSource = Parser()
将主视图控制器设置为其委托时
dataSource.delegate = self
您的主视图控制器将作为您刚刚创建的这个新实例的委托收到通知。这意味着:如果你的 Parser(( 类的实例跳入(使用调试器保证,如果它确实如此(
loadAndParse()
它可能是另一个对象,因此此解析器对象没有实际的委托。如果这是这里的问题,您可以考虑和出口,以便能够直接与这个特定的 Parser(( 类通信。希望这有帮助。
您还可以编辑此行:
从:
dataSource.delegate = self
dataSourse.loadAndParse()
自:
dataSource.delegate = self
dataSource.loadAndParse()