Невозможно использовать responseds ToSelector, используя ARC на Mac - PullRequest
83 голосов
/ 29 октября 2011

Когда я звоню 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

Любые предложения о том, почему я получаю эту ошибку?

Ответы [ 2 ]

272 голосов
/ 29 октября 2011

Привести протокол в соответствие с NSObject

@protocol MTScrollViewDelegate <NSObject>

В противном случае компилятор не думает, что объект ответит на сообщения NSObject, такие как respondsToSelector, и выдаст предупреждение.Это будет успешно во время выполнения без проблем в любом случае.

4 голосов
/ 11 июля 2016

Для Свифта это становится:

@objc protocol MTScrollViewDelegate: NSObjectProtocol

Протокол NSObject группирует методы, которые являются фундаментальными для всех объектов Objective-C.

Для получения дополнительной информации о том, что такое NSObjectProtocol: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html

...