问题描述
我正在使用AVSpeechSynthesizer说话,在将文本用于200次抽烟之后,正在发生一些奇怪的行为(在macOS Simulator中,也在iPad Simulator中)
在经过200次调用(synthesizer.speak(utterance)
之后,一切都按预期工作,突然进入了他的AVSpeechSynthesizerDelegte的didCancel
method(),甚至停止工作了!甚至没有{{1} },或者其他任何委托方法都被称为didCancel
。
我尝试在synthesizer.speak(utterance)
方法内将合成器引用分配给新的AVSpeechSynthesizer实例,但是在didCancel
方法产生唯一使它“完成”的东西之后,它对此没有任何影响回来”再次运行该应用程序,然后在使用合成器语音方法进行了200次调用后再次运行,该应用程序再次崩溃。
这是我的代码:
didCancel
解决方法
好吧,我设法解决了这个问题,我在speakText(utterance: AVSpeechUtterance)
语句中调用if else
方法,该语句根据需要更改话语文本,然后在每个块中调用该函数。(在{ {1}}和if
块)
我所做的就是使发声不在这些块之外,并将其分配为nil:else
。
然后在var utterance:AVSpeechUtterance
块中给它分配适当的值。
然后在块之外,我检查了值是否已设置,以及是否已设置(不是nil)。所有这些功能都在从同步的全局线程块触发的功能中变形。像这样
if else
希望这种处理方式可以为将来会遇到该问题的人提供一个思路或方向。