1

私はView Controllerを持っており、.hには次のものがあります:

{
    NSString* textToSpeak;
}

@property (nonatomic, strong) AVSpeechSynthesizer*  synthesizer;

私のView Controllerの.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 が呼び出されなくなりました。なぜこれが起こっているのか、どうすれば修正できるのか疑問に思っています。どんな助けでも素晴らしいでしょう、ありがとう!

4

1 に答える 1

0

問題を解決しました.. @ChrisLoonamあなたは最終的に大きな助けになりました。事前にシンセサイザーを停止する必要があり、すべてが適切に割り当て解除されました

于 2014-08-15T18:59:36.173 に答える