在respondsToSelector if语句之后调用类型id上的方法时发出警告

时间:2011-08-02 11:33:57

标签: iphone ios4 delegates iphone-sdk-3.0 selector

我很确定这是一个简单的问题,但这是我无法解决的问题。

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

我怀疑它可能与源编译的顺序有关吗?

任何帮助都非常感激。

3 个答案:

答案 0 :(得分:1)

虽然您可以使用@selector(somethingHere:)创建任意选择器,但如果没有编译器警告,则无法在id变量上调用任意方法。编译器仍将检查您正在调用的方法/选择器是否已在类或类别上定义某处

您需要包含适当的标头,以便编译器知道系统中有可以响应该方法的对象/类,否则您可能会错误地键入选择器并且永远不会知道它。

编辑:

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

答案 1 :(得分:-1)

如果你想隐藏 id 数据类型背后的真实类,而不是写 someProtocol 而不是在ivars中定义_delegate并指定它实现该协议的内容。

id<someProtocol> _delegate;

答案 2 :(得分:-1)

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