Ios 委托未调用Swift协议方法
由于某些原因,未在主视图控制器中调用委托方法。我在这里寻找另一个答案,但没有一个对我有帮助。我是不是遗漏了什么?(为了简单起见,我缩短了原始代码) 主视图控制器:Ios 委托未调用Swift协议方法,ios,swift,delegation,Ios,Swift,Delegation,由于某些原因,未在主视图控制器中调用委托方法。我在这里寻找另一个答案,但没有一个对我有帮助。我是不是遗漏了什么?(为了简单起见,我缩短了原始代码) 主视图控制器: class VC: ParserDelegate { var dataSource = Parser() override func viewDidLoad() { super.viewDidLoad() dataSource.delegate = self data
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()类的实例跳入(如果确实跳入,请使用调试器确保)
它可能是另一个对象,因此这个解析器对象没有实际的委托。如果这是问题所在,您可以考虑和导出,以便能够直接与这个特定的PARS()类对话。希望这有帮助。
您也可以编辑这行:
发件人:dataSource.delegate = self
dataSourse.loadAndParse()
致:
dataSource.delegate = self
dataSource.loadAndParse()
您是否检查过
委托
是否不为空?出于某种原因,它是nil
。但为什么它是nil
,我不明白。您是否设置了委托?您完全正确,我只是注意到出于某种原因,我创建了另一个解析器
类并调用了loadAndParse()
。谢谢你指出这一点。很高兴我能帮助你。为什么投反对票?用作dataSourse.loadAndParse()的数据源有一个小的上下文错误。这个答案应该是一个注释。
dataSource.delegate = self
dataSource.loadAndParse()