Невозможно использовать responsesToSelector с помощью ARC на Mac
Когда я вызываю 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
Любые предложения о том, почему я получаю эту ошибку?
Ответы
Ответ 1
Сделайте протокол совместимым с NSObject
@protocol MTScrollViewDelegate <NSObject>
В противном случае компилятор не считает, что объект будет отвечать на сообщения NSObject, такие как respondsToSelector
, и будет генерировать предупреждение. Он будет успешным во время выполнения без проблем в любом случае.
Ответ 2
Для Swift это будет:
@objc protocol MTScrollViewDelegate: NSObjectProtocol
Методы групп NSObject группируют, которые являются фундаментальными для всех объектов Objective-C.
Для получения дополнительной информации о том, что NSObjectProtocol: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html