2011-08-10 10 views
6

मैं उद्देश्य सी सीखने की कोशिश कर रहा हूं और मेरे परिणामों में से एक के लिए कोड में एक त्रुटि है और मुझे नहीं पता कि इसे कैसे हल किया जाए। कोड:सेट डिलीगेट: स्वयं सावधानी झंडा उत्पन्न करता है

// 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: स्वयं]; मुझे त्रुटि मिलती है: असंगत प्रकार 'आईडी < NSSpeechSynthesizerDelagate>' के पैरामीटर पर 'AppController *' भेजना। प्रोग्राम एक सावधानी ध्वज के साथ संकलित करता है और ठीक से चल रहा है। मैंने अपने कोड की तुलना लेखक के कोड से की है और मुझे कोई अंतर नहीं मिल सकता है और मेरी कोई भी खोज इंगित नहीं हुई है कि मुझे इस लाइन पर एक त्रुटि मिलनी चाहिए। पुस्तक एक्सकोड 3 के लिए लिखा गया था और मैं एक्सकोड 4.0.2 का उपयोग कर रहा हूं।

कोई भी सुझाव या सही दिशा में मुझे इंगित करने की सराहना की जाएगी। धन्यवाद।

+0

क्या आप हेडर में प्रतिनिधि प्रोटोकॉल को कार्यान्वित कर रहे हैं? –

+0

क्या आपका ऐप कंट्रोलर NSSpeechSynthesizerDelegate को कार्यान्वित करता है? – Perception

उत्तर

14

एक्सकोड आपको चेतावनी दे रहा है कि setDelegate विधि उस वर्ग के उदाहरण की अपेक्षा करती है जिसने NSSpeechSynthesizerDelagate प्रोटोकॉल को कार्यान्वित किया है। अब, आपके पास है, लेकिन आप शायद यह घोषणा करने के लिए भूल गए हैं कि आपके पास है। अपनी कक्षा घोषणा में,

@class AppController : NSObject 

@class AppController : NSObject<NSSpeechSynthesizerDelegate> 

करने के लिए दुनिया को बताने के लिए बदल "मैं आज्ञा का पालन NSSpeechSynthesizerDelegate!", और चेतावनी चुप्पी। आप कभी नहीं जानते - आपको चेतावनी दी जा सकती है कि आप कुछ गैर-वैकल्पिक प्रतिनिधि विधियों को लागू करना भूल गए हैं, और लाइन के नीचे कहीं भी एक परेशान बग को बचाएं।  

+0

46 मिनट में, जैसे ही मुझे दोबारा वोट मिलेगा, मैं इसे +1 कर दूंगा। –

+0

@adam आपके उत्तर और उदाहरण के लिए धन्यवाद, जो काम करता है। मैं कभी नहीं जानता था कि उस प्रारूप में कोडिंग कैसे करें। यह किताब में नहीं था और न ही लेखकों के ऑनलाइन उदाहरणों में था। मेरे पास टेबलव्यू से बंधे प्रतिनिधिमंडल थे ताकि मैं भाषण के लिए आवाज़ों तक पहुंच सकूं और सोचा कि मुझे बस इतना ही चाहिए। –

2

जब आप स्वयं ऑब्जेक्ट डालें तो चेतावनी संदेश गायब हो जाता है।

[speechSynth setDelegate:(id <NSSpeechSynthesizerDelegate>) self]; 
संबंधित मुद्दे