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