使用iOS 7上的AVSpeechSynthesizer,但保留兼容性iOS 6

问题描述:

您好,我了解TTS仅在iOS 7中可用,但我过去通过检查该类是否可用,并设法保留了以前版本的兼容性,但使用AVSpeechSynthesizer它似乎不工作,你能帮我使用iOS 7的TTS,并通过在iOS 6中禁用它来保持兼容性,非常感谢。使用iOS 7上的AVSpeechSynthesizer,但保留兼容性iOS 6

这里是我的代码,但它似乎没有工作

if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)) { 
    if([AVSpeechSynthesizer class]) { 
     AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init]; 
     AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:text]; 
     utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"]; 
     utterance.rate = AVSpeechUtteranceDefaultSpeechRate/2; 
     utterance.pitchMultiplier = 0.9; 
     utterance.preUtteranceDelay = 0; 
     utterance.postUtteranceDelay = 0; 
     [synth speakUtterance:utterance]; 
    } else { 
     // Feature not available, do something else 
    } 
} 

我已经在我的项目链接avfoundation并设置部署目标iOS 6中,它似乎只工作在iOS 7设备乳宁时如果它的iOS 6崩溃了。

这里是错误消息我得到

dyld: Symbol not found: _AVSpeechUtteranceDefaultSpeechRate 
+1

你有没有薄弱的联系框架? – rmaddy

+0

非常感谢你,在模拟器中它似乎工作! –

+1

转到“构建阶段”并将“AVFundation”从必需变为可选...和Voila! – TonyMkenu

该框架必须是弱链接。请执行以下操作:

  1. 单击项目导航您的项目文件(左侧)在编辑器中打开您的项目
  2. 点击构建阶段在编辑器中标签
  3. 展开链接二进制与图书馆部分
  4. 设置AVFoundation.framework要求可选

Setting AVFoundation.framework from Required to Optional

此外,你可能想用one that's safer更新您的版本检查(和苹果推荐)。

+0

您播下了我们的通讯?为什么你的答案不同? :) – TonyMkenu

+2

@TonyMkenu正如我所看到的,堆栈溢出的重点是有人来找到他们问题的答案。如果这个问题没有真正的答案,并且只有评论,有人可能会错过这个问题的解决方案。 –

+0

你也有权!快乐的编码! :) – TonyMkenu