ios开发解决No known instance method for selector 'respondsToSelector:'的方法
2016-03-16 22:36
816 查看
声明的协议protocol没有从NSObject继承
如:
and
compilation fail
解决办法
a method on NSObject. Either assume that your
is in fact an NSObject, and cast it:
Or, better, make your delegate explicitly an NSObject:
Or make the protocol be a sub-protocol of 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
iddelegate
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>
相关文章推荐
- iOS中的事件传递和响应者链条
- iOS开发AssetsLibrary框架访问本地相册
- iOS之页面传值-----单例传值、通知传值
- ios json
- IOS 沙盒机制 浅析
- IOS 杂笔-2(协议)
- IOS 杂笔-1(为什么不继承类簇?)
- iOS的观察者模式
- iOS边练边学--自定义等高的cell
- iOS:使用block进行类与类,控制器与控制器之间的传值
- iOS 学习笔记-关于Button
- iOS之05-三大特性之封装
- Core Motion 加速器的使用步骤
- iOS启动屏 ➕ 闪屏的方法
- iOS多线程开发
- IOS开发之申请测试证书的步骤
- IOS动画
- ios--随笔二
- UVa 11111 - Generalized Matrioshkas
- NSMutableAttributedString