[Résolu]Delegate NSSpeechSynthesizer
Liaght
Membre
Bonjour,
Après une recherche infructueuse j'ouvre un nouveau sujet à propos des différences de 10.6.
Je suis actuellement en train d'étudier le livre d'[url=http://www.bignerdranch.com/book/cocoa®_programming_for_mac®_os_x_3rd_edition]Aaron Hillegass[/url] Programmation Cocoa sous Mac OS X, j'en suis au chapitre 6 et je bloque sur la délégation. Sur le site de l'auteur (cliquez sur le nom de l'auteur, ci-dessus), il est dit dans la partie Errata que depuis Snow Leopard, l'introduction de Objective-C avait modifié quelque peu le fonctionnement des delegate. Malgré ce que conseille l'auteur, j'obtiens à la compilation du projet :
Voici mon code :
AppController.h :
AppController.m :
Je n'arrive pas à résoudre l'erreur, si j'en suis la logique je devrais inclure le fichier d'en-tête contenant le delegate mais comme il est inclut dans la class NSSpeechSynthesizer et que je l'utilise je me dis que c'est pas ça...
Merci.
Après une recherche infructueuse j'ouvre un nouveau sujet à propos des différences de 10.6.
Je suis actuellement en train d'étudier le livre d'[url=http://www.bignerdranch.com/book/cocoa®_programming_for_mac®_os_x_3rd_edition]Aaron Hillegass[/url] Programmation Cocoa sous Mac OS X, j'en suis au chapitre 6 et je bloque sur la délégation. Sur le site de l'auteur (cliquez sur le nom de l'auteur, ci-dessus), il est dit dans la partie Errata que depuis Snow Leopard, l'introduction de Objective-C avait modifié quelque peu le fonctionnement des delegate. Malgré ce que conseille l'auteur, j'obtiens à la compilation du projet :
Cannot find protocol declaration for 'NSSpeechSynthesizerDelegate' in /SpeakLineTwo/AppController.h
Voici mon code :
AppController.h :
#import <Cocoa/Cocoa.h><br /><br />@interface AppController: NSObject <NSSpeechSynthesizerDelegate> {<br /> IBOutlet NSTextField *textField;<br /> IBOutlet NSButton *startButton;<br /> IBOutlet NSButton *stopButton;<br /> NSSpeechSynthesizer *speechSynth;<br />}<br />- (IBAction)sayIt:(id)sender;<br />- (IBAction)stopIt:(id)sender;<br /><br />@end
AppController.m :
#import "AppController.h"<br /><br />@implementation AppController<br /><br />- (id)init<br />{<br /> [super init];<br /> <br /> NSLog(@"Initialisation");<br /> <br /> speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];<br /> [speechSynth setDelegate:self];<br /> <br /> return self;<br />}<br /><br />- (IBAction)sayIt:(id)sender<br />{<br /> NSString *string = [textField stringValue];<br /> <br /> if ([string length] == 0) {<br /> NSLog(@"La chaà®ne de %@ est vide.", textField);<br /> <br /> return;<br /> }<br /> <br /> [speechSynth startSpeakingString:string];<br /> NSLog(@"Lecture de : %@", string);<br /> [startButton setEnabled:NO];<br /> [stopButton setEnabled:YES];<br />}<br /><br />- (IBAction)stopIt:(id)sender<br />{<br /> NSLog(@"Arrêt en cours");<br /> [speechSynth stopSpeaking];<br />}<br /><br />- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender <br /> didFinishSpeaking:(BOOL)complete<br />{<br /> [startButton setEnabled:YES];<br /> [stopButton setEnabled:NO];<br /> NSLog(@"Fin = %@", complete);<br />}<br />@end
Je n'arrive pas à résoudre l'erreur, si j'en suis la logique je devrais inclure le fichier d'en-tête contenant le delegate mais comme il est inclut dans la class NSSpeechSynthesizer et que je l'utilise je me dis que c'est pas ça...
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne sais pas comment faire pour trouver l'erreur. Il semblerait qu'il faille utiliser les break point mais j'en pas saisis la subtilité.
Un "point d'arrêt", grosso modo, cela correspond à un endroit dans le programme où l'on veut s'arrêter temporairement (le programme se met en pause) afin de pouvoir observer le contenu des variables et ainsi s'assurer que le programme fonctionne correctement ou déterminer les raisons d'un plantage.
Autrement dit, si tu penses qu'un crash se produit quand le programme exécute la ligne de code "n", alors tu mets un point d'arrêt sur la ligne "n-1". Quand cette ligne est exécutée, le programme se met en pause et tu peux examiner le contexte d'exécution courant (valeur des variables locales et globales, contenu de la pile d'exécution, etc...).
didFinishSpeaking:(BOOL)complete
{
[startButton setEnabled:YES];
[stopButton setEnabled:NO];
NSLog(@Fin = %", complete);
}
J'avoue que je n'avais pas pris le temps de lire le code.
Je vois pas la différence en tout cas ça fonctionne !
le %@ dans ta chaine indique à NSLog que le paramètre suivant (complete) et un objet, ce qui n'est pas le cas puisque c'est un booleen (et en Objective-C les types primitifs ne sont pas des objets). Tel que c'est écrit, ça peut "marchoter" (notamment si complete = NO), mais aussi planter...
NSLog(@Fin = %@", complete ? @oui : @non);
Merci.
???
J'ai pas le livre, mais dans le code source, y a bien %d :P
Je vais me cacher