代码之家  ›  专栏  ›  技术社区  ›  Joseph Tura

MPMoviePlayerController只在通用应用程序中抛出错误

  •  0
  • Joseph Tura  · 技术社区  · 15 年前

    我的应用程序在启动时以全屏模式播放视频。从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 回复  |  直到 15 年前
        1
  •  1
  •   marcio    15 年前

    几天前我也犯了同样的错误。只需将基本sdk从3.2更改为4.1 希望有帮助

        2
  •  1
  •   Joseph Tura    15 年前

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