Objective c setDelegate:self生成警告标志

Objective c setDelegate:self生成警告标志,objective-c,delegates,Objective C,Delegates,我正试图学习Objective C,但我的一篇文章的代码中有一个错误,我不知道如何解决它。 代码: 来自[speechSynth setDelegate:self];我收到错误:将“AppController*”发送到不兼容类型“id”的参数。 该程序使用警告标志进行编译,并且似乎运行正常。我已经将我的代码与作者的代码进行了比较,没有发现任何差异,我的搜索也没有表明我应该在这一行中得到错误。这本书是为Xcode 3编写的,我使用的是Xcode 4.0.2 如有任何建议或为我指明正确方向,我将不胜

我正试图学习Objective C,但我的一篇文章的代码中有一个错误,我不知道如何解决它。 代码:

来自[speechSynth setDelegate:self];我收到错误:将“AppController*”发送到不兼容类型“id”的参数。 该程序使用警告标志进行编译,并且似乎运行正常。我已经将我的代码与作者的代码进行了比较,没有发现任何差异,我的搜索也没有表明我应该在这一行中得到错误。这本书是为Xcode 3编写的,我使用的是Xcode 4.0.2


如有任何建议或为我指明正确方向,我将不胜感激。谢谢。

Xcode警告您,
setDelegate
方法需要实现了
NSSpeechSynthesizerDelagate
协议的类的实例。现在,你有了,但你可能只是忘了声明你有。在类声明中,更改

@class AppController : NSObject

@class AppController:NSObject

告诉世界“我服从”
NSSpeechSynthesizerDelegate
!”,并使警告静音。你永远不知道-你可能会被警告说你忘记了实现一些非可选的委托方法,并在某个地方保存了一个恼人的bug。

当你抛出self对象时,警告消息就会消失

[speechSynth setDelegate:(id < NSSpeechSynthesizerDelegate >) self];
[speechSynth setDelegate:(id)self];

您是否在头中实现了委托协议?您的AppController是否实现了NSSpeechSynthesizerDelegate?@adam感谢您的回答和成功的示例。我自己永远也不会想出如何用这种格式编码。这本书和作者的在线示例中都没有。我确实将代表绑定到了tableview,这样我就可以访问语音进行演讲,我认为这就是我所需要的。
@class AppController : NSObject<NSSpeechSynthesizerDelegate>
[speechSynth setDelegate:(id < NSSpeechSynthesizerDelegate >) self];