No known instance method for selector 'respondsToSelector:'红色警告导致编译失败

红色警告截图
出错部分源码
@interface EGORefreshTableHeaderView : UIView

@property (weak, nonatomic) id <EGORefreshTableHeaderDelegate> delegate;

@end

@protocol EGORefreshTableHeaderDelegate

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view;  //触发刷新
- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view;  //数据开始加载

@optional

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view;  //数据最后更新

@end

and

 ...   

if ([_delegate respondsToSelector:@selector(egoRefreshTableHeaderDataSourceIsLoading:)])
{
  _loading = [_delegate egoRefreshTableHeaderDataSourceIsLoading:self];
 }

...
出错原因

声明的协议protocol没有从NSObject继承

解决方案
  1. 由于respondsToSelector是NSObject的实例方法,所以指定_delegate是一个NSObject实例就可以

     [(NSObject *)_delegate respondsToSelector:@selector(egoRefreshTableHeaderDataSourceIsLoading:)]
    
  2. 明确指定delegate是一个NSObject实例

      @property (weak, nonatomic) NSObject<EGORefreshTableHeaderDelegate>* delegate;
    
  3. make the protocol be a sub-protocol of NSObject:

     @protocol EGORefreshTableHeaderDelegate <NSObject>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,662评论 1 32
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,522评论 0 11
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,058评论 0 9
  • 医讲究的是阴阳,表里,虚实,整体。同时有八纲辨症为:阴阳,表里,虚实,寒热。八类证候。在中医里,各种疾病的表现尽管...
    慧杏阅读 180评论 0 0
  • 女儿的表达常常并不直接,让我很是难猜。 改卷到两点半,终于可以回家了。和女儿一起走出学校大门,她还一直欢呼雀跃。过...
    艾月儿阅读 426评论 1 5

友情链接更多精彩内容