Iphone 在respondsToSelector if语句之后对类型id调用方法时出现警告

Iphone 在respondsToSelector if语句之后对类型id调用方法时出现警告,iphone,ios4,delegates,iphone-sdk-3.0,selector,Iphone,Ios4,Delegates,Iphone Sdk 3.0,Selector,我相当肯定这是一个简单的问题,但这是我一直无法解决的问题 我在if语句中使用respondsToSelector方法来检查委托是否实现了方法。在if语句中,我调用这个选择器。没什么复杂的。但是我收到一条警告说找不到该方法,()。但是,如果我包含实现该方法的类的头文件,警告就会消失 我怀疑这可能与源代码的编译顺序有关 非常感谢您的帮助。如果您想在id数据类型后面隐藏真正的类,请编写一些协议,然后在ivars中定义委托,并指定它实现该协议的内容 id<someProtocol> _del

我相当肯定这是一个简单的问题,但这是我一直无法解决的问题

我在if语句中使用
respondsToSelector
方法来检查委托是否实现了方法。在if语句中,我调用这个选择器。没什么复杂的。但是我收到一条警告说找不到该方法,()。但是,如果我包含实现该方法的类的头文件,警告就会消失

我怀疑这可能与源代码的编译顺序有关


非常感谢您的帮助。

如果您想在id数据类型后面隐藏真正的类,请编写一些协议,然后在ivars中定义委托,并指定它实现该协议的内容

id<someProtocol> _delegate;
id\u代表;

确保已在协议中声明了方法。

尽管可以使用
@selector(somethingHere:)
创建任意选择器,但在没有编译器警告的情况下,不能对
id
变量调用任意方法。编译器仍将检查您正在调用的方法/选择器是否已在类或类别的某个位置定义

id<someProtocol> _delegate;
您需要包含适当的头,以便编译器知道系统中存在可以响应该方法的对象/类,否则您可能会键入错误的选择器,并且永远不会知道它

编辑:

好的,我现在看到您正在实现一个委托。在这种情况下,您需要使用适当的方法声明协议,并为您的代理使用类型
id
。然后您的类应该声明为实现该协议

id<someProtocol> _delegate;