0

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];
4

1 に答える 1