2010-10-25 2 views
4

У меня проблема с MPMoviePlayerViewController: если контроллер не может найти фильм по указанному URL-адресу, он отображает белый экран, и я не могу закрыть его.Dismiss MPMoviePlayerViewController при ошибке воспроизведения

Это, как я начинаю видеопроигрыватель:

- (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];  
    } 

} 
} 

и это, как moviePlayBackDidFinish: метод выглядит следующим образом


    - (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); 
    } 

белый экран происходит только тогда, когда URL указывает неправильно

ответ

3

Ничего, ребята, я понял это.

По-видимому, в методе moviePlaybackDidFinish вы должны вызвать

[player stop]; 

до увольнения контроллера.

выше, игрок объект MPMoviePlayerController получается так:

MPMoviePlayerController *player = [notification object]; 
Смежные вопросы