2010-10-25 53 views
4

J'ai un problème avec MPMoviePlayerViewController: Si le contrôleur ne parvient pas à trouver le film à l'URL spécifiée, il affiche un écran blanc et je n'arrive pas à le faire fermer.Ignorer MPMoviePlayerViewController en cas d'erreur de lecture

Voici comment je lance le lecteur vidéo:

- (void) playVideo:(NSString*)path 
{ 
NSURL* url = [NSURL URLWithString:path]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

double osversion = [[[UIDevice currentDevice] systemVersion] doubleValue]; 
if (osversion >= 3.2) 
{ 
    mplayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 

    if (mplayerVC) 
    { 
    mplayerVC.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
    [mplayerVC.moviePlayer play]; 
    mplayerVC.moviePlayer.shouldAutoplay = TRUE; 

    [self presentMoviePlayerViewControllerAnimated:mplayerVC]; 

    //[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateChanged:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];  
    } 

} 
} 

et voici comment moviePlayBackDidFinish: méthode ressemble à ceci


    - (void) moviePlayBackDidFinish:(NSNotification*)notification 
    { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

    NSError* error = [[notification userInfo] valueForKey:@"error"]; 
    if (error != nil) 
    { 
     // Movie ended with an error 
     DLog(@"error=%@", error); 
    } 
    else 
    { 
     // Movie ended successfully 
    } 

    [self dismissMoviePlayerViewControllerAnimated]; 
    SAFE_DEL(mplayerVC); 
    } 

L'écran blanc ne se produit que si l'URL pointe mauvais

Répondre

3

Peu importe les gars, je l'ai compris.

Apparemment, dans la méthode moviePlaybackDidFinish vous devez appeler

[player stop]; 

avant de rejeter le contrôleur.

Au-dessus, le joueur est l'objet MPMoviePlayerController obtenu comme ceci:

MPMoviePlayerController *player = [notification object];