objective-c - 设置委托(delegate) :self generates a caution flag

标签 objective-c delegates

我正在尝试学习 Objective C,但我的其中一个类(class)的代码有错误,我不知道如何解决。 代码:

 //  AppController.m

 #import "AppController.h"

 @implementation AppController

 - (id)init
    {
         [super init];
         speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
         [speechSynth setDelegate:self];
         voiceList = [[NSSpeechSynthesizer availableVoices] retain];
         Return self;
    }

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

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

最佳答案

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

@class AppController : NSObject

@class AppController : NSObject<NSSpeechSynthesizerDelegate>

告诉世界“我服从 NSSpeechSynthesizerDelegate!”,并消除警告。你永远不会知道 - 你可能会收到警告,你忘记了实现一些非可选的委托(delegate)方法,并在某处为自己省下一个烦人的错误。

关于objective-c - 设置委托(delegate) :self generates a caution flag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7018636/

相关文章:

iphone - 我如何在弹出 View Controller 上做一个翻转动画?

c# - CF 中的计时器不计时

ios - 在 viewWillDisappear 中将委托(delegate)设置为 nil?

ios - UIView 工厂和委托(delegate)

ios - Cocoa Pods 在 Debug模式下运行时链接库失败?

objective-c - 将 SpriteKit SKScene 中的 2D 点覆盖SKScene 映射到 SceneKit SCNScene 中的 3D 点

iphone - 为什么不建议用id分配和初始化?

c++ - 什么是 Mac 上 C++/Windows SendMessage() 的等效项(如果有)?

c# - 如何使用 Windsor 容器注入(inject) Func<T,U>

swift - 如何在 Swift 语言中分配文本字段或任何委托(delegate)?