2011-08-10 10 views
6

私はObjective Cを習得しようとしています。私のレッスンのコードにエラーがあり、解決方法がわかりません。 コード:setDelegate:自己警告フラグを生成します

// 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:自己]から。私はエラーが発生します:互換性のない型 'id < NSSpeechSynthesizerDelagate>'のパラメータに 'AppController *'を送ります。 プログラムは注意フラグでコンパイルされ、正しく動作しているようです。私は自分のコードを作者のコードと比較して違いはなく、私の検索ではこの行に誤りがあるはずがないことを示しています。この本はXcode 3用に書かれたもので、私はXcode 4.0.2を使用しています。

どのような提案や正しい方向への私を指していただければ幸いです。ありがとう。

+0

デリゲートプロトコルをヘッダーに実装していますか? –

+0

あなたのAppControllerはNSSpeechSynthesizerDelegateを実装していますか? – Perception

答えて

14

setDelegateメソッドでは、NSSpeechSynthesizerDelagateプロトコルを実装したクラスのインスタンスが必要であると警告しています。さて、あなたは持っていますが、おそらくあなたが持っていることを宣言することを忘れてしまったでしょう。あなたのクラス宣言では、 "私はNSSpeechSynthesizerDelegateに従う!" 世界に伝える、と警告を黙らせる

@class AppController : NSObject<NSSpeechSynthesizerDelegate> 

@class AppController : NSObject 

を変更。あなたは決して知らないでしょう - あなたはいくつかのオプションではないデリゲートメソッドを実装することを忘れてしまったかもしれないと警告し、邪魔なバグをどこかに残してしまいます。  

+0

46分後にもう一度投票するとすぐに+1します。 –

+0

@adamあなたの答えとその事例をありがとう。私は決して自分自身でその形式でコーディングを行う方法を考え出すことはできませんでした。本や著者のオンラインの例ではありませんでした。デリゲートをテーブルビューにボンディングして、ボイスにアクセスしてスピーチを行い、それが私が必要としていたものだと思った。 –

2

自己オブジェクトをキャストすると警告メッセージが表示されなくなります。

[speechSynth setDelegate:(id <NSSpeechSynthesizerDelegate>) self]; 
関連する問題