現象
デリゲートにselfを代入したときにwarningが出る
コードself.hoge.delegate = self;
エラーメッセージAssigning to 'id<HogeDelegate>' from incompatible type 'ViewController'
原因
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
コメント