Мой MoviePlayer не отвечает на функцию - PullRequest
0 голосов
/ 30 октября 2010

Я столкнулся с проблемой утечки памяти и других новых инициирований MoviePlayer, так как мой MoviePlayer не реагирует на функцию, в результате которой я отпускаю этот проигрыватель на своей кнопке done.

(void) playMovieAtURL
{

    MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoURL]];
    mpViewController.view.backgroundColor = [UIColor blackColor];
    [self presentMoviePlayerViewControllerAnimated:mpViewController];

    [mpViewController.view setCenter:self.view.center];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(myMovieFinishedCallback:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:mpViewController]; 

} 


    // When the movie is done,release the controller. (Doesn't come in it.)
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:MPMoviePlayerPlaybackDidFinishNotification 
                                                  object:theMovie]; 

    // Release the movie instance created in playMovieAtURL
    [theMovie release]; 
}

Ответы [ 2 ]

0 голосов
/ 30 октября 2010

Я попытался решить эту проблему, передав ноль, и теперь он возвращает мне обратные вызовы, но фильм все равно не выйдет, я тоже попробую ваше предложение.В любом случае мой новый код

-(void) playMovieAtURL
{

MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoURL]];
mpViewController.view.backgroundColor = [UIColor blackColor];
[self presentMoviePlayerViewControllerAnimated:mpViewController];

[mpViewController.view setCenter:self.view.center];

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

} 

// When the movie is done,release the controller. 
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
        name:MPMoviePlayerPlaybackDidFinishNotification 
        object:nil]; 

    // Release the movie instance created in playMovieAtURL
    [theMovie release]; 
}
0 голосов
/ 30 октября 2010

Не уверен, что это ваш случай, но это то, что в документации говорится о MPMoviePlayerPlaybackDidFinishNotification:

Это уведомление не отправляется в тех случаях, когда проигрыватель фильмов отображается в полноэкранном режиме, а пользователь нажимает кнопку Готово.,В этом случае кнопка «Готово» останавливает воспроизведение фильма, когда проигрыватель выходит из полноэкранного режима.Если вы хотите обнаружить этот сценарий в своем коде, вам следует отслеживать другие уведомления, такие как MPMoviePlayerDidExitFullscreenNotification.

Похоже, что MPMoviePlayerPlaybackDidFinishNotification вызывается только тогда, когда сам фильм останавливается.Если вы используете кнопку «Готово», вместо этого следует использовать MPMoviePlayerDidExitFullscreenNotification.

...