ios开发解决No known instance method for selector 'respondsToSelector:'的方法

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


如:

<code style="margin: 0px; padding: 0px; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit;"><span class="com" style="color: rgb(128, 128, 128); margin: 0px; padding: 0px; border: 0px;">//MyClass.h:</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">

</span><span class="lit" style="color: rgb(128, 0, 0); margin: 0px; padding: 0px; border: 0px;">@class</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="typ" style="color: rgb(43, 145, 175); margin: 0px; padding: 0px; border: 0px;">MyClass</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">;</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">

</span><span style="color: rgb(204, 0, 0);"><span class="lit" style="margin: 0px; padding: 0px; border: 0px;">@Protocol</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px;"> </span><span class="typ" style="margin: 0px; padding: 0px; border: 0px;">MyClassDelegate</span></span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">
</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">(</span><span class="kwd" style="color: rgb(0, 0, 139); margin: 0px; padding: 0px; border: 0px;">void</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">)</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">myClass</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">:(</span><span class="typ" style="color: rgb(43, 145, 175); margin: 0px; padding: 0px; border: 0px;">MyClass</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">*)</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">sender willDoSomething</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">:(</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">BOOL</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">)</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">animated</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">;</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">
</span><span class="lit" style="color: rgb(128, 0, 0); margin: 0px; padding: 0px; border: 0px;">@end</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">

</span><span class="lit" style="color: rgb(128, 0, 0); margin: 0px; padding: 0px; border: 0px;">@interface</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="typ" style="color: rgb(43, 145, 175); margin: 0px; padding: 0px; border: 0px;">MyClass</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">:</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="typ" style="color: rgb(43, 145, 175); margin: 0px; padding: 0px; border: 0px;">UIViewController</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">

</span><span class="lit" style="color: rgb(128, 0, 0); margin: 0px; padding: 0px; border: 0px;">@property</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">(</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">nonatomic</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">,</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> weak</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">)</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> id</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"><</span><span class="typ" style="color: rgb(43, 145, 175); margin: 0px; padding: 0px; border: 0px;">MyClassDelegate</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">></span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;"> </span><span class="kwd" style="color: rgb(0, 0, 139); margin: 0px; padding: 0px; border: 0px;">delegate</span><span class="pun" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">;</span><span class="pln" style="color: rgb(0, 0, 0); margin: 0px; padding: 0px; border: 0px;">

</span><span class="lit" style="color: rgb(128, 0, 0); margin: 0px; padding: 0px; border: 0px;">@end</span></code>

and

<code style="margin: 0px; padding: 0px; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit;"><span class="com" style="margin: 0px; padding: 0px; border: 0px; color: rgb(128, 128, 128);">//MyClass.m:</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">

</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">...</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">
</span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; color: rgb(128, 0, 0);">@synthesize</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">delegate</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> _delegate</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">
</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">...</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">

id sanitizedDelegate </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">self</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">.</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">delegate</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> </span><span class="com" style="margin: 0px; padding: 0px; border: 0px; color: rgb(128, 128, 128);">//Hmmmm... why does this work?</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">

</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">if</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">([</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">sanitizedDelegate respondsToSelector</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">:</span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; color: rgb(128, 0, 0);">@selector</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">myClass</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">:</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">willDoSomething</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">:)])</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">{</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">
    </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">[</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">self</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">.</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">delegate</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> myClass</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">:</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">self</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"> willDoSomething</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">:</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">animated</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">];</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">
</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);">}</span></code>
这样会报错   the compilation fail


解决办法

-respondsToSelector: is a method on NSObject. Either assume that your id delegate is in fact an NSObject, and cast it:

[(NSObject*)self.delegate respondsToSelector:@selector(myClass:willDoSomething:)]

Or, better, make your delegate explicitly an NSObject:

@property (nonatomic, weak) NSObject<MyClassDelegate>* delegate;

Or make the protocol be a sub-protocol of NSObject:

@protocol MyClassDelegate <NSObject>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值