David David - 5 months ago 42
Objective-C Question

Cannot use respondsToSelector using ARC on Mac

When I call

respondsToSelector
in an ARC environment, I get the following error message
Automatic Reference Counting Issue
No known instance method for selector respondsToSelector:


This is the header

#import <AppKit/AppKit.h>


@class MTScrollView;

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


@interface MTScrollView : NSScrollView
{

}

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

@end


This is the implementation file

#import "MTScrollView.h"

@implementation MTScrollView

@synthesize delegate;


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

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

@end


Any suggestions on why I am getting this error?

Answer

Make the protocol conform to NSObject

@protocol MTScrollViewDelegate <NSObject>

Otherwise the compiler doesn't think that the object will respond to NSObject messages like respondsToSelector, and will generate a warning. It will succeed at runtime without issues either way.