デリゲートにselfを指定するときにエラー
下記URLに移転しました。
5秒後に自動的にリダイレクトします
現象
デリゲートにselfを代入したときにwarningが出る
コード
self.hoge.delegate = self;
エラーメッセージ
Assigning to 'id<HogeDelegate>' from incompatible type 'ViewController'
原因
デリゲート先のクラスで<HogeDelegate>
のプロトコルを採用していなかった
@interface ViewController () // ここに <HogeDelegate> が不足している @property (nonatomic, strong) Hoge* hoge; @end
詳細
デリゲートを使用する際には、デリゲート先(実際に処理を実装する方)で</*デリゲート名*/>
の形式で、使用するデリゲートを指定し、「このデリゲートを使いますよ〜」ということを表す必要がある。
そうすることで、デリゲート先でデリゲート元のプロトコルが準拠され、self
がHogeDelegate
型として利用できるようになり、デリゲート元のメソッドを実装して使用することができる。
(というふうに解釈したのだけれど、果たしてこれはあってるのかしら)
今回は、プロトコルの準拠を明示することを怠っていたため、self
はViewController
型でしかなく、HogeDelegate
型のdelegate
とは型が一致せず、warningが出た。
解決策
@interface ViewController () <HogeDelegate> @property (nonatomic, strong) Hoge* hoge; @end