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