Почему MPMovieDurationAvailableNotification отправляется только один раз для многих моих экземпляров MPMoviePlayerController? - PullRequest
0 голосов
/ 03 февраля 2011

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

Для каждого экземпляра MPMoviePlayerController в рабочем классе я слушаю событие MPMovieDurationAvailableNotification от проигрывателя фильмов. По какой-то причине это событие кажется только отправленным (или, по крайней мере, я только могу его перехватить) из одного из рабочих экземпляров. Вот код инициализации и слушателя. Есть несколько комментариев.

- (id) initWithRequestAsset:(RequestAsset *)asset {
if (self = [super init]) {
    self.requestAsset = asset;
    self.moviePlayer = [MPMoviePlayerController alloc];
    [self setupMoviePlayerListeners];
    [self.moviePlayer initWithContentURL:self.requestAsset.urlPath];
    self.moviePlayer.shouldAutoplay = NO;

    //  I've also tried to retain the moviePlayer, to no avail
    [self.moviePlayer release];
}
return self;

}

- (void) setupMoviePlayerListeners {
//
// If the object: is set to nil then Im able to catch three notifications, but they are all from last instance of the MPMoviePlayerController
//
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(onMovieDurationAvailable:)
                                             name:MPMovieDurationAvailableNotification
                                           object:self.moviePlayer];

}

- (void) onMovieDurationAvailable:(NSNotification *)notification {
NSLog(@"duration received notification");

self.requestAsset.duration = [[notification object] duration];

[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMovieDurationAvailableNotification object:self.moviePlayer];

}

Что я делаю не так? Я подумал, что если бы я установил параметр object: для экземпляра MPMoviePlayerController, это позволило бы мне получить только событие для этого экземпляра. Однако кажется, что я получаю только последнее отправленное уведомление.

1 Ответ

1 голос
/ 09 ноября 2011

Вы можете иметь только 1 активный экземпляр MPMoviePlayerController. Вы можете создать несколько, но только 1 будет работать одновременно.

См. (Примерно на 2 экрана вниз): http://developer.apple.com/library/ios/#documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html

"Примечание. Несмотря на то, что вы можете создавать несколько объектов MPMoviePlayerController и представлять их представления в своем интерфейсе, только один проигрыватель фильмов одновременно может воспроизводить его."

...