Acuerdo de fondo de pantalla MPMoviePlayerViewController. ¿Cómo seguir jugando después de volver de fondo a primer plano?

Estoy trabajando en la aplicación de video streaming. Está construido con ARC para iOS5. Para mostrar la vista yo usoMPMoviePlayerViewController de esta manera:

.h

@interface EpisodesTableViewController : UITableViewController<EpisodeUrlResolverDelegate> {
    NSTimeInterval playbackTime;
    EpisodeUrlResolver *episodeUrlResolver;
}
@property (strong, nonatomic) MPMoviePlayerViewController *player;
@end

.metro

@implementation EpisodesTableViewController
@synthesize episodes, player;

- (void)viewDidLoad
{
    [super viewDidLoad];
    episodeUrlResolver = [[Soap4MeEpisodeUrlResolver alloc] init];
    [episodeUrlResolver setDelegate:self];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:@"WillEnterForeground" object:nil];                 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterBackground) name:@"WillEnterBackground" object:nil];
}

- (void)viewDidUnload
{
    episodeUrlResolver = nil;
    player = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"WillEnterForeground" object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"WillEnterBackground" object:nil];
    [super viewDidUnload];
}

- (void)url:(NSURL *)url WasResolvedForEpisode:(Episode *)episode {
    player = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
    player.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    player.moviePlayer.allowsAirPlay = YES;
    [self presentModalViewController:player animated:YES];
}

- (void)willEnterBackground {
    if (player) {
        playbackTime = player.moviePlayer.currentPlaybackTime;
    }
}

- (void)willEnterForeground {
    if (!player)
        return;
    if(player.moviePlayer.playbackState == MPMoviePlaybackStateInterrupted || player.moviePlayer.playbackState == MPMoviePlaybackStateStopped || player.moviePlayer.playbackState == MPMoviePlaybackStatePaused)
    {
        [self continuePlayback];
    }
}

- (void)continuePlayback {
    [self presentModalViewController:player animated:YES];
    [player.moviePlayer setInitialPlaybackTime:playbackTime];
    NSLog(@"%f", player.moviePlayer.initialPlaybackTime);
    [player.moviePlayer play];
}

Pocas palabras sobre el código presentado: cuando se resuelve la url para el video, creo elMPMoviePlayerViewController&nbsp;Objeto para reproducción de video. Se inicia la reproducción. Luego, cuando la aplicación va de fondo con el botón de inicioMPMoviePlayerViewController&nbsp;Pausa automáticamente la reproducción y desaparece de la pantalla (comportamiento extraño, como para mí). Es por eso que tengo que ahorrar tiempo de reproducción cuando la aplicación está en segundo plano y mostrar la existenteMPMoviePlayerViewController&nbsp;de nuevo con el tiempo de reproducción restaurado cuando la aplicación está de nuevo en primer plano. Funciona bien cuando el usuario presiona el botón de inicio y luego vuelve a la aplicación.

Pero no funciona cuando el usuario bloquea el dispositivo.WillEnterBackground&nbsp;la notificación se dispara cuandoaplicaciónWillEnterForeground&nbsp;se llama, por lo que para el evento de bloqueo se llama también. Pero en caso de que el usuario bloquee el dispositivo, MPMoviePlayerViewController no se está descartando correctamente como en una situación en la que el usuario presiona el botón de inicio. Está oculto de la pantalla, pero llamando al código.

[self presentModalViewController:player animated:YES];

arroja la excepción

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <EpisodesTableViewController: 0x91b3950>.'

Intenté cambiar el código para descartar el controlador:

- (void)willEnterForeground {
        if (!player)
            return;
        if(player.moviePlayer.playbackState == MPMoviePlaybackStateInterrupted || player.moviePlayer.playbackState == MPMoviePlaybackStateStopped || player.moviePlayer.playbackState == MPMoviePlaybackStatePaused)
        {
            if (self.presentedViewController) {
            [self dismissViewControllerAnimated:YES completion:^{
                [self continuePlayback];

            }];
        }
        else {
            [self continuePlayback];
        }
        }
    }

Ahora no lanza la excepción, pero muestra advertencia

wait_fences: failed to receive reply: 10004003

tambiénterminación&nbsp;Bloque nunca se llama.

¿Cómo resolver correctamente el fondo / primer plano continuar jugando con MPMoviePlayerViewController visualizado modalmente?&nbsp;Gracias por las respuestas.