#iphone #xcode #ios5 #simulator
#iPhone #xcode #ios5 #тренажёр
Вопрос:
Я столкнулся с проблемой … возможно, кто-то сталкивался с чем-то подобным: у меня есть приложение, которое использует MPMoviePlayerController, и раньше оно работало отлично. Пытаясь скомпилировать и запустить его с новым Xcode 4.2 с помощью симулятора iPhone 5, MPMoviePlayerController не отправляет уведомления при загрузке фильма. Похоже, ему не удается правильно определить видеофайл. Код выглядит более или менее так (упрощенный код):
// First I'm initializing the player with a URL from a file
MPMoviePlayerController *player;
player = [[MPMoviePlayerController alloc] init];
player.shouldAutoplay = NO;
NSURL *url = [NSURL fileURLWithPath:path];
player.contentURL = url;
// Then I'm adding an observer in order to wait for the player to find movie duration
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(durationAvailable:)
После вышесказанного я жду в цикле вызова уведомления, ожидая около 10 секунд, в течение которых я вызываю цикл выполнения.
Используя тот же код, ту же версию Xcode 4.2, но с симулятором iPhone 4.3, примерно через секунду вызывается уведомление, и я могу прочитать продолжительность воспроизведения. Однако при запуске точно такого же кода в симуляторе iPhone 5 функция уведомления никогда не вызывается, и если я попытаюсь прочитать продолжительность фильма впоследствии, она содержит 0.
Есть идеи?
Спасибо, Ариэль
Комментарии:
1. Мне любопытно, почему вы ждете в цикле выполнения
2. То, что я пытался сделать, это извлечь несколько параметров из фильма, таких как его продолжительность, натуральный размер и т.д., И они указаны в уведомлениях после того, как платформа проанализирует фильм. Но я хотел получить их синхронным способом, поэтому я добавил наблюдателей и ждал в цикле вызова уведомлений. Поскольку я не хотел блокировать все, я вызвал цикл запуска во время ожидания.
Ответ №1:
Хорошо, мне удалось найти обходной путь к проблеме. По-видимому, добавление этой строки после добавления наблюдателя делает свое дело:
[player pause];
Похоже, что если вы каким-то образом не «активируете» проигрыватель, уведомления не будут запускаться. В моем случае я просто хотел получать уведомления о продолжительности фильма без запуска воспроизведения, и это хорошо работало в версиях до iOS5, но, похоже, они изменили поведение. В любом случае, приведенная выше строка решает проблему.
Ariel
Ответ №2:
попробуйте это MPMoviePlayerPlaybackStateDidChangeNotification :
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stop)
name:MPMoviePlayerPlaybackStateDidChangeNotification
object:nil];