2010-10-12 19 views
0

我的應用程序在應用程序啓動時以全屏模式播放視頻。一切都從3.0到4.1完美無缺地工作。MPMoviePlayerController僅在通用應用程序中引發錯誤

但是,如果我爲通用應用編譯相同的代碼,它將在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]: unrecognized selector sent to instance

0x7924470

即使我試圖阻止這個是這樣的...

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

...的錯誤仍然被拋出。

回答

1

我得到了同樣的錯誤幾天前。它只需要將基礎sdk從3.2更改爲4.1 希望它有幫助

+0

是的,它修復了它。謝謝,馬西奧! – 2010-10-12 14:33:46

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

如果我能記得我爲什麼這樣做是擺在首位的其他方式;)

相關問題