Lorsque j'appelle respondsToSelector
dans un environnement ARC, j'obtiens le message d'erreur suivant Automatic Reference Counting Issue
No known instance method for selector respondsToSelector:
Ceci est l'en-tête
#import <AppKit/AppKit.h>
@class MTScrollView;
@protocol MTScrollViewDelegate
-(void)scrollViewDidScroll:(MTScrollView *)scrollView;
@end
@interface MTScrollView : NSScrollView
{
}
@property(nonatomic, weak) id<MTScrollViewDelegate>delegate;
@end
Ceci est le fichier d'implémentation
#import "MTScrollView.h"
@implementation MTScrollView
@synthesize delegate;
- (void)reflectScrolledClipView:(NSClipView *)aClipView
{
[super reflectScrolledClipView:aClipView];
if([delegate respondsToSelector:@selector(scrollViewDidScroll:)])
{
[delegate scrollViewDidScroll:self];
}
}
@end
Des suggestions sur la raison pour laquelle j'obtiens cette erreur?
Rendre le protocole conforme à NSObject
@protocol MTScrollViewDelegate <NSObject>
Sinon, le compilateur ne pense pas que l'objet répondra aux messages NSObject comme respondsToSelector
et générera un avertissement. Il réussira au moment de l'exécution sans aucun problème.
Pour Swift cela devient:
@objc protocol MTScrollViewDelegate: NSObjectProtocol
Le protocole NSObject regroupe les méthodes fondamentales pour tous les objets Objective-C.
Pour plus d'informations sur ce qu'est NSObjectProtocol: https://developer.Apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html