У меня есть 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, это позволило бы мне получить только событие для этого экземпляра. Однако кажется, что я получаю только последнее отправленное уведомление.