【问题标题】:MPMoviePlayerController throws errors ONLY in universal appMPMoviePlayerController 仅在通用应用程序中引发错误
【发布时间】:2010-10-12 21:50:49
【问题描述】:

我的应用在启动时会以全屏模式播放视频。从 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 视图]:无法识别的选择器发送到实例

0x7924470

即使我试图阻止这种情况......

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

...仍然抛出错误。

【问题讨论】:

    标签: iphone ipad ios mpmovieplayercontroller universal


    【解决方案1】:

    几天前我遇到了同样的错误。只需将基础 sdk 从 3.2 更改为 4.1 希望对你有帮助

    【讨论】:

    • 是的,解决了它。谢谢你,马西奥!
    【解决方案2】:

    我还没有对该错误的解释。但这似乎可行(需要在旧设备上测试):

    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];
        }
    

    如果我能记得为什么我一开始就这样做了;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2021-05-08
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多