2013-05-20 99 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]; 
}