Impossible d’utiliser respondsToSelector avec ARC sur Mac

Lorsque j’appelle respondsToSelector dans un environnement ARC, le message d’erreur suivant s’affiche Automatic Reference Counting Issue No known instance method for selector respondsToSelector:

C’est l’en-tête

 #import  @class MTScrollView; @protocol MTScrollViewDelegate -(void)scrollViewDidScroll:(MTScrollView *)scrollView; @end @interface MTScrollView : NSScrollView { } @property(nonatomic, weak) iddelegate; @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 je reçois cette erreur?

Rendre le protocole conforme à NSObject

 @protocol MTScrollViewDelegate  

Sinon, le compilateur ne pense pas que l’object répondra aux messages NSObject comme respondsToSelector et générera un avertissement. Il réussira à l’exécution sans problèmes de toute façon.

Pour Swift, cela devient:

 @objc protocol MTScrollViewDelegate: NSObjectProtocol 

Le protocole NSObject regroupe des méthodes fondamentales pour tous les objects Objective-C.

Pour plus d’informations sur ce que NSObjectProtocol est: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html