2013-05-20 138 views
0

在我嘗試在IB中創建的UIView中播放MPMoviePlayerController的實例時,過去幾天我一直在運行應用程序中發生崩潰。 應用程序的其餘部分運行正常,但如果任何MPMoviePlayer被實例化,調試器會暫停應用程序而不會引發異常。這不僅僅是這個代碼引起的。其他從其他帖子或書籍實例化MoviePlayer的方法會產生相同的結果。運行MPMoviePlayerController時出現故障

它,當我運行此代碼,它將退出到主:

NSURL *url = exercise.exerciseVideoURL;//path for vid 

    self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:url]; 



    [self.moviePlayerController.view setFrame:self.movieHostingView.bounds]; 

    [self.moviePlayerController prepareToPlay]; 
    [self.moviePlayerController setControlStyle:MPMovieControlStyleNone]; 
    [self.movieHostingView addSubview:self.moviePlayerController.view]; 


    [[self.moviePlayerController view] 
    setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | 
          UIViewAutoresizingFlexibleHeight)]; 

    [[self.moviePlayerController view] setClipsToBounds:YES]; 
    [[self.moviePlayerController view] setFrame:[[self movieHostingView] bounds]]; 
    [self.movieHostingView addSubview:self.moviePlayerController.view]; 
    self.moviePlayerController.repeatMode = MPMovieRepeatModeOne; 

我使用MPMoviePlayer實例從其他崗位代碼試過,裝箱斷模式,只是用它實例像其他一些帖子中的直接路徑,但它仍然退出到main()。

+0

「我似乎無法讓xcode標記導致崩潰的行」當然可以。設置一箇中斷點並遍歷代碼,直至崩潰。 – matt

+0

感謝您回答亞光。我嘗試從「NSURL * url = exercise.exerciseVideoURL;」中逐步完成,並且通過了所有這些。它深入到所有的低級別的東西數百步驟,我還沒有到達死機線。 –

+0

只有使用[tag:xcode]標籤才能瞭解關於IDE本身的問題。謝謝! – Undo

回答

11

明白了!我從斷點選項卡中刪除了「所有異常」,並且它運行良好。爲什麼會導致MPMoviePlayer退出?無論如何,感謝所有幫助過我的人。

+0

是的,它刪除「所有異常」後工作,任何人都有解釋 – chawki

0

你是從磁盤(主包)還是通過互聯網閱讀視頻? 首先,始終確保您的文件路徑是正確的:

NSString *filepath = [url absoluteString]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:filepath]) 
{ 
    NSLog(@"file exists so init player"); 
} 
else 
{ 
    NSLog(@"try again!"); 
} 

在我的情況,我總是後的負載增加的MPMoviePlayerController。 所以,你可以做這樣的事情:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"mp4"]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:filepath]) 
{ 

    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    _moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 

    [_moviePlayerController prepareToPlay]; 

    NSLog(@"frame = %@", NSStringFromCGRect(_moviePlayerController.backgroundView.frame)); 

    [_moviePlayerController.view setBackgroundColor:[UIColor yellowColor]]; 
    [_moviePlayerController.view setFrame:CGRectMake(0, 280, 320, 200)]; 


    // 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(movieLoadStateDidChangeNotification:) 
               name:MPMoviePlayerLoadStateDidChangeNotification 
               object:_moviePlayerController]; 
} 

,然後一段時間後:

- (void)movieLoadStateDidChangeNotification:(NSNotification *)notification 
{ 
    [self.view addSubview:_moviePlayerController.view]; 
}