AVAudioPlayer の再生の進行状況を反映するようにスライダーを移動する MessagePlayerViewController(UIViewController) に次の関数のペアがあります。
-(void)startTrackingPlayback
{
if(!self.isPlaying)
{
self.isPlaying = YES;
self.playbackTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
}
}
-(void)stopTrackingPlayback
{
if(self.playbackTimer)
{
if(self.playbackTimer.isValid)
{
[self.playbackTimer invalidate];
self.playbackTimer = nil;
}
}
self.isPlaying = NO;
}
断続的に、識別可能なパターンに従っていないためExec Bad Access
、スタック内の上位 2 つのアイテムを次のように取得します。
0 objc_msgSend
1 [MessagePlayerViewController stopTrackingPlayback];
どうすればいいの?呼び出す前にタイマーが存在するかどうかを確認し、無効にする前にisValid
確認します。isValid
ブレークポイントを使用すると、タイマーが存在することがわかりますが、タイマーを nil に設定するとエラーが発生します。この行を削除すると、次の行で同じエラーが発生します。
[self.playbackTimer invalidate];