无法在 Mac 上使用 ARC 使用 RespondsToSelector

当我在 ARC 环境中调用 respondsToSelector时,会得到以下错误消息 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

对于我为什么会得到这个错误有什么建议吗?

15382 次浏览

使协议符合 NSObject

@protocol MTScrollViewDelegate <NSObject>

否则,编译器不会认为对象会响应像 respondsToSelector这样的 NSObject 消息,而是会生成一个警告。无论如何,它在运行时都会成功。

对斯威夫特来说,这变成了:

@objc protocol MTScrollViewDelegate: NSObjectProtocol

NSObject 协议将所有 Objective-C 对象的基本方法分组。

有关什么是 NSObjectProtocol 的更多信息,请参见 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html