2011-08-10 2 views
6

목표 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 : 자기] 오류 : "AppController * '호환되지 않는 형식'id < NSSpeechSynthesizerDelagate> '매개 변수를 보냅니다. 프로그램이주의 플래그로 컴파일되어 올바르게 실행 된 것 같습니다. 필자는 작성자의 코드와 내 코드를 비교 했으므로 아무런 차이점을 찾을 수 없으며 내 검색에서 내가이 행에 오류가 발생해야한다고 표시하지 않았습니다. 이 책은 Xcode 3 용으로 작성되었으며 Xcode 4.0.2를 사용하고 있습니다.

올바른 방향으로 나를 안내하거나 제안하면 크게 감사하겠습니다. 감사.

+0

헤더에 위임 프로토콜을 구현하고 있습니까? –

+0

AppController가 NSSpeechSynthesizerDelegate를 구현합니까? – Perception

답변

14

setDelegate 메서드가 NSSpeechSynthesizerDelagate 프로토콜을 구현 한 클래스의 인스턴스를 필요로한다고 Xcode에서 경고합니다. 자,하지만 당신은 아마 당신이 가지고 있다는 것을 선언하는 것을 잊었을 것입니다. 클래스 선언에서 "! 내가 NSSpeechSynthesizerDelegate 순종"

@class AppController : NSObject 

@class AppController : NSObject<NSSpeechSynthesizerDelegate> 

에 세상을 말할 변경하고 경고를 침묵. 당신은 모를 것입니다 - 당신은 몇몇 비 - 선택적인 델리게이트 메소드를 구현하는 것을 잊어 버렸다고 경고받을 것입니다, 그리고 어딘가에있는 성가신 버그를 저장하십시오.  

+0

46 분 후에 다시 투표 할 때마다 +1 할 것입니다. –

+0

@adam 답변과 예제를 이용해 주셔서 감사합니다. 나는 그 형식으로 코딩하는 법을 스스로 알지 못했을 것입니다. 이 책이나 저자의 온라인 예제에는 없었습니다. 나는 음성을 위해 목소리에 액세스 할 수 있도록 테이블 뷰에 바인드 된 대리인을 가지고 있었고 필요한 모든 것만 생각했습니다. –

2

자기 개체를 캐스팅하면 경고 메시지가 사라집니다.

[speechSynth setDelegate:(id <NSSpeechSynthesizerDelegate>) self]; 
관련 문제