Нельзя использовать respondsToSelector, используя дуги на Mac


когда я называю respondsToSelector в среде ARC я получаю следующее сообщение об ошибке Automatic Reference Counting IssueNo 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 82

2 ответа:

сделать протокол в соответствии с NSObject

@protocol MTScrollViewDelegate <NSObject>

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

для Swift это становится:

@objc protocol MTScrollViewDelegate: NSObjectProtocol

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

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