[Objective-C] デリゲートにselfを指定するときにエラー

iOS
スポンサーリンク
スポンサーリンク

現象 デリゲートにselfを代入したときにwarningが出る コード

self.hoge.delegate = self;

エラーメッセージ

Assigning to 'id<HogeDelegate>' from incompatible type 'ViewController'

原因 デリゲート先のクラスで<HogeDelegate>のプロトコルを採用していなかった @interface ViewController () // ここに <HogeDelegate> が不足している @property (nonatomic, strong) Hoge* hoge; @end 詳細

デリゲートを使用する際には、デリゲート先(実際に処理を実装する方)で</*デリゲート名*/>の形式で、使用するデリゲートを指定し、「このデリゲートを使いますよ〜」ということを表す必要がある。
そうすることで、デリゲート先でデリゲート元のプロトコルが準拠され、selfHogeDelegate型として利用できるようになり、デリゲート元のメソッドを実装して使用することができる。
(というふうに解釈したのだけれど、果たしてこれはあってるのかしら)

今回は、プロトコルの準拠を明示することを怠っていたため、selfViewController型でしかなく、HogeDelegate型のdelegateとは型が一致せず、warningが出た。

解決策

@interface ViewController () <HogeDelegate>
@property (nonatomic, strong) Hoge* hoge;
@end

参考

iOS Objective-C
スポンサーリンク
🐻黒くまのおむすび🍙

コメント