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
이 오류가 발생하는 이유에 대한 제안 사항이 있습니까?
답변
프로토콜이 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