2017-08-06 16 views
2

何らかの理由で、デリゲートメソッドがメインビューコントローラで呼び出されていません。私はここで別の答えを探していたが、それらのうちのどれも私のためには役に立たなかった。私はここに何かを逃していますかデリゲートによってスウィフトプロトコルメソッドが呼び出されていない

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'がnullでないことを、確認しましたか? – clemens

+0

何らかの理由で 'nil'です。しかしなぜそれが「無」であるのか分かりません。 – bohdankoshyrets

+0

デリゲートをまったく設定しましたか? – gnasher729

答えて

2

デリゲートパターンがあることさ

メインビューコントローラを(私は単純化のために私の元のコードを短縮しました)ここで正しく適用されますが、ここで間違っている可能性があります:メインのView Controllerで新しいParserオブジェクトをstantiatingし、「データソース」に格納します。

var dataSource = Parser() 

をし、そのデリゲート

dataSource.delegate = self 

としてあなたのメインビューコントローラを設定するときに、あなたのメイン・ビュー・コントローラは、この新しいインスタンスのデリゲートとして通知されますあなたは今作成しました。それは意味:あなたのパーサ()クラスのインスタンスはにジャンプした場合

loadAndParse() 

が、それは別のオブジェクトであるかもしれないので、このパーサオブジェクトが実際のデリゲートを持っていない(それは実際にはない場合、デバッガを保証します)。これがここで問題になる場合は、この特定のParser()クラスと直接対話できるようにするために、考慮してコンセントを使用してください。お役に立てれば。

dataSource.delegate = self 
dataSourse.loadAndParse() 

:から

:また、この行を編集することができます

+0

あなたは絶対に正しいですが、何らかの理由で別の 'Parser'クラスを作成し、' loadAndParse() 'を呼び出すことに気付きました。それを指摘していただきありがとうございます。 – bohdankoshyrets

+0

私はあなたを助けることができてうれしい。 – Alienbash

0

dataSource.delegate = self 
dataSource.loadAndParse() 
関連する問題