AVSpeechSynthesizer不允许View Controller取消分配

时间:2014-08-15 15:14:34

标签: ios objective-c dealloc avspeechsynthesizer

我有一个视图控制器,在.h我有:

{
    NSString* textToSpeak;
}

@property (nonatomic, strong) AVSpeechSynthesizer*  synthesizer;

在我的视图控制器的.m中,我正在使用合成器来播放和暂停我创建的预制脚本。

例如:

-(void)userProfileData:(UserProfileData *)userProfileData didReceiveDict:(NSDictionary *)dict
{

    NSDictionary* resultsDict = [dict valueForKey:@"result"];
    textToSpeak = [resultsDict objectForKey:@"text"];

    UIBarButtonItem* pauseItem = [self.navigationItem.rightBarButtonItems objectAtIndex:0];
    [pauseItem setEnabled:YES];


    [self startSpeaking];
}


-(void)startSpeaking
{
    if (!self.synthesizer) {
        self.synthesizer = [[AVSpeechSynthesizer alloc] init];
        self.synthesizer.delegate = self;
    }

    [self speakNextUtterance];
}


-(void)speakNextUtterance
{
    AVSpeechUtterance* nextUtterance = [[AVSpeechUtterance alloc] initWithString:textToSpeak];
    nextUtterance.rate = 0.25f;

    [self.synthesizer speakUtterance:nextUtterance];
}

在我创建这个合成器之前,我会导航回父视图控制器并调用dealloc(我在其中有一个日志语句以确保它被调用)。但是,只要我添加了这个合成器,就不再调用dealloc了。我想知道为什么会这样,以及我如何解决它。任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

解决了这个问题.. @ChrisLoonam你最终得到了很大的帮助。我只是需要事先停止合成器并且所有内容都已正确释放