您的位置:首页 > 移动开发 > IOS开发

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

2016-03-16 22:36 816 查看
声明的协议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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: