1. ホーム
  2. objective-c

[解決済み] MacのARCでrespondsToSelectorが使用できない。

2023-07-03 01:23:17

質問

電話するとき respondsToSelector を ARC 環境で呼び出すと、次のようなエラーメッセージが表示されます。 Automatic Reference Counting Issue No known instance method for selector respondsToSelector:

これはヘッダーです。

#import <AppKit/AppKit.h>


@class MTScrollView;

@protocol MTScrollViewDelegate
-(void)scrollViewDidScroll:(MTScrollView *)scrollView;
@end


@interface MTScrollView : NSScrollView 
{

}

@property(nonatomic, weak) id<MTScrollViewDelegate>delegate;

@end

これは実装ファイルです

#import "MTScrollView.h"

@implementation MTScrollView

@synthesize delegate;


- (void)reflectScrolledClipView:(NSClipView *)aClipView
{
    [super reflectScrolledClipView:aClipView];

    if([delegate respondsToSelector:@selector(scrollViewDidScroll:)])
    {
        [delegate scrollViewDidScroll:self];
    }
}

@end

なぜこのエラーが発生するのか、何か提案はありますか?

どのように解決するのですか?

プロトコルをNSObjectに準拠させる

@protocol MTScrollViewDelegate <NSObject>

そうでなければ、コンパイラはオブジェクトが以下のような NSObject メッセージに応答するとは考えません。 respondsToSelector のようなNSObjectメッセージに反応しないと判断し、警告を発生させます。どちらにしても、実行時には問題なく成功します。