0

我的应用程序在启动时以全屏模式播放视频。从 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];
  }

...错误仍然被抛出。

4

2 回答 2

1

我还没有解释这个错误。但这似乎有效(需要在旧设备上测试):

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

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

于 2010-10-12T13:35:23.120 回答
1

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

于 2010-10-12T13:50:49.343 回答