MPMoviePlayerController генерирует ошибки ТОЛЬКО в универсальном приложении - PullRequest
0 голосов
/ 12 октября 2010

Мое приложение воспроизводит видео в полноэкранном режиме при запуске приложения.Все работает безупречно с 3,0 до 4,1.

Однако, если я скомпилирую тот же код для универсального приложения, он будет работать на iPad, но больше не будет работать на iPhone (симуляторе).

Кто-нибудь решил эту проблему?

Вот код:

if ([self respondsToSelector:@selector(presentMoviePlayerViewControllerAnimated:)]) {
  videoPath = [[NSBundle mainBundle] pathForResource:@"portrait" ofType:@"mov"];
  videoURL = [NSURL fileURLWithPath:videoPath];

  MPMoviePlayerController *aMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
  self.moviePlayerController = aMoviePlayerController;
  [aMoviePlayerController release];  

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
  [moviePlayerController.view setFrame:self.view.bounds];
  [self.view addSubview:moviePlayerController.view];

  moviePlayerController.controlStyle = MPMovieControlStyleNone;
 } else {
  //OS < 3.2
  videoPath = [[NSBundle mainBundle] pathForResource:@"landscape" ofType:@"mov"];
  videoURL = [NSURL fileURLWithPath:videoPath];

  MPMoviePlayerController *aMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
  self.moviePlayerController = aMoviePlayerController;
  [aMoviePlayerController release];

  moviePlayerController.movieControlMode = MPMovieControlModeHidden;
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerContentPreloadDidFinishNotification object:nil];
 }

И вот ошибка:

- [MPMoviePlayerControllerOld view]: нераспознанный селекторотправлено экземпляру

0x7924470

Даже если я попытаюсь предотвратить это следующим образом ...

if ([moviePlayerController respondsToSelector:@selector(view)]) {
   [moviePlayerController.view setFrame:self.view.bounds];
  }

... ошибка по-прежнему выдается.

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Я получил ту же ошибку несколько дней назад. Нужно было только поменять базовый sdk с 3.2 на 4.1 Надеюсь, это поможет

1 голос
/ 12 октября 2010

У меня пока нет объяснения ошибки. Но, похоже, это работает (нужно проверить на старых устройствах):

if ([self respondsToSelector:@selector(presentMoviePlayerViewControllerAnimated:)]) {
        videoPath = [[NSBundle mainBundle] pathForResource:@"portrait" ofType:@"mov"];
        videoURL = [NSURL fileURLWithPath:videoPath];

        /* NEW */
        MPMoviePlayerViewController *aMoviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
        aMoviePlayerViewController.moviePlayer.view.frame = self.view.bounds;
        aMoviePlayerViewController.moviePlayer.controlStyle = MPMovieControlStyleNone;
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
        [aMoviePlayerViewController.moviePlayer play];
        [self.view addSubview:aMoviePlayerViewController.view];
        self.moviePlayerController = aMoviePlayerViewController;


    } else {
        //OS < 3.2
        videoPath = [[NSBundle mainBundle] pathForResource:@"landscape" ofType:@"mov"];
        videoURL = [NSURL fileURLWithPath:videoPath];

        MPMoviePlayerController *aMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
        self.moviePlayerController = aMoviePlayerController;

        aMoviePlayerController.movieControlMode = MPMovieControlModeHidden;
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerContentPreloadDidFinishNotification object:nil];

        [aMoviePlayerController release];
    }

Если бы я только мог вспомнить, почему я сделал это иначе, во-первых;)

...