Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 委托未调用Swift协议方法_Ios_Swift_Delegation - Fatal编程技术网

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()