代理不会调用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) 
    } 
} 
+2

你检查,该'delegate'不为空? – clemens

+0

由于某种原因,它是'nil'。但是为什么它是'无'我不明白。 – bohdankoshyrets

+0

你是否设置了代表? – gnasher729

委托模式是作为在这里正确应用,但有一件事可能在这里出错:在你的主视图控制器中stantiating一个新的解析器对象并将其存储在“数据源”:

var dataSource = Parser() 

和设置您的主视图控制器时,作为其代表

dataSource.delegate = self 

您的主视图控制器得到通知,因为这新的实例的代表你刚创建。这意味着:如果你的分析器()类的一个实例跳进(确保与调试器,如果它实际上)

loadAndParse() 

它可能是另一个对象,所以这个解析器对象没有实际的委托。如果这是这个问题,那么您可以考虑并直接与这个特定的Parser()类进行交流。希望这可以帮助。

+0

你是绝对正确的,我只注意到由于某种原因,我创建了另一个'Parser'类,并在其上调用'loadAndParse()'。谢谢你指出。 – bohdankoshyrets

+0

很高兴我能帮助你。 – Alienbash

您也可以编辑这行:

来自:

dataSource.delegate = self 
dataSourse.loadAndParse() 

到:

dataSource.delegate = self 
dataSource.loadAndParse()