我不会用一堆代码让你厌烦,我会在下面总结一下。
在应用程序委托中,我创建了一个 nsspeechrecognizer 设置它的委托,添加命令,然后开始监听。
语音识别器第一次识别命令并继续,只要我不阻止它听。
一旦我通过调用 stoplistening 来停止语音识别器,就会进行后续调用以开始侦听,但不会再次识别以前识别器的命令。
我已经确认命令数组保持不变。这是一种“每个命令都工作一次”类型的东西。
再次识别命令的唯一方法是终止语音识别器核心代理进程。重新启动我的应用程序不会这样做。
这不是 el cap 的问题。有任何人在 Sierra 遇到过这样的怪事。
Let speechRecognizer = NSSpeechRecognizer()
speechRecognizer.delegate = self
speechRecognizer.listenInBackgroundOnly = false
speechRecognizer.commands = cmdArray
speechRecognizer.startListening()
在 didrecognize 命令委托中
If cmd== specificCommand {
Print("heard")
// commenting out the following line allows recognizer to continue functioning correctly
speechRecognizer.stopListening()
}
另一个方法调用再次开始侦听。并且命令在startlistening被调用后才被识别......除了已经识别的命令。
这是在 Sierra 机器上的 Xcode 8 上使用 swift 2.3 编译的