我在obj-c中制作ios应用程序,我希望电子邮件与我交谈。但是应用程序在这一行崩溃:[synthesizer speakUtterance:utterance];
这是说电子邮件的方法:
-(void) speakEmails {
NSString *currentEmail = [summariesList objectAtIndex:0];
NSLog(@"Email Being Spoken: %@", currentEmail);
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:currentEmail];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc]init];
[synthesizer speakUtterance:utterance];
}
这就是NSString currentEmail
的含义:
Email Being Spoken: {
date = Today;
sender = "tony@starkindustries.com";
summary = "Blah Blah Blah Blah";
type = regular;
}
我一直得到错误-[__NSCFDictionary length]: unrecognized selector sent to instance 0x16528b30
。我不知道为什么会这样。
您将currentEmail
设置为字典(解析JSON)而不是字符串。试试这个:
NSString *currentEmail = [[summariesList objectAtIndex:0] objectForKey:@"sender"];
为了确保将来不会发生这种情况,您可以像这样做一个快速检查:
-(void) speakEmails {
NSString *currentEmail = [summariesList objectAtIndex:0];
NSLog(@"Email Being Spoken: %@", currentEmail);
if (currentEmail != nil)
{
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:currentEmail];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc]init];
[synthesizer speakUtterance:utterance];
}
}