Определите, когда MPMoviePlayerController приостановлен или остановлен - PullRequest
0 голосов
/ 16 июля 2011

У меня есть два симптома:

1) когда я вызываю [ourMovie release] в моем movieFinished: методе ниже , мне говорят, что я выпускаю что-то уже выпущенное .. не передается ли [sentNotification object] в - movieFinished: a скопировать и, следовательно, что-то, что я должен выпустить ??

2) Абсолютно не связано с (1) то, что при добавлении наблюдателя NSNotification для MPMoviePlayerPlaybackDidFinishNotification фильм не отображается. Нет обнаружимой ошибки, просто нет шоу ?? Моя цель здесь - определить, когда пользователь приостанавливает или останавливает воспроизведение, а затем нажимает кнопку «Домой», чтобы отправить мое приложение в фоновый режим. Когда приложение возвращается на передний план, я хочу продолжить фильм, где пользователь оставил его, когда он нажал кнопку паузы или остановки ... не начинать с нуля, как мое приложение сейчас.

Прежде чем продолжить, в моем AppDelegate есть

:
[notificationCenter addObserver:self
                       selector:@selector(pauseApp)
                           name:@"UIApplicationDidEnterBackgroundNotification"
                         object:ourApp];

К вашему сведению: мой –pauseApp в итоге вызывает [ourMovie pause]

В моем –playVideo: у меня есть метод

[notificationCenter addObserver:self
                       selector:@selector(movieFinished:)
                           name:MPMoviePlayerPlaybackDidFinishNotification
                         object:ourMovie];

[notificationCenter addObserver:self
                       selector:@selector(pauseDownload)
                           name:@"MPMoviePlayerPlaybackStateDidChangeNotification"
                         object:ourMovie];

и для моего метода - MovieFinished у меня есть

- (void )movieFinished:(NSNotification *)sentNotification
{
    NSObject *theNotifyObject = [sentNotification object];

    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

    if ( [theNotifyObject isKindOfClass:[MPMoviePlayerController class]] )
    {
        MPMoviePlayerController *ourMovie = (MPMoviePlayerController *)theNotifyObject;

        [notificationCenter removeObserver:self
                                      name:MPMoviePlayerPlaybackDidFinishNotification
                                    object:ourMovie];

        [notificationCenter removeObserver:self
                                      name:MPMoviePlayerPlaybackDidFinishNotification
                                    object:ourMovie];

        [ourMovie pause];
        [ourMovie stop];
        [ourMovie release];   // release what we don't own   ???
    }
}

1 Ответ

0 голосов
/ 17 июля 2011

1) Нет, вам не нужно выпускать ourMovie.Вы ничего не копируете, вы просто передаете объект в качестве аргумента методу, ссылаясь на то же место в памяти.Поэтому, если ваше предыдущее управление памятью было правильным при создании объекта, вам не нужно ничего делать на этом этапе.

2) Если вы хотите, чтобы видео воспроизводилось с того же места во времени, то почемувы звоните stop после вызова pause на ourMovie?

Это цитата из документации Apple по MPMediaPlayBack stop метод: "Этот метод останавливаетсявоспроизведения текущего элемента и сбрасывает точку воспроизведения на начало элемента. "

...