2013-05-20 4 views
0

Ive сражался с крахом моего приложения-приложения в течение последних нескольких дней, когда я пытаюсь сыграть экземпляр MPMoviePlayerController в UIView, созданный в IB. Остальное приложение работает нормально, но если какой-либо 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

Понял! Ive удалил «Все исключения» с вкладки «точка останова» и ее выполнение отлично. Почему это приведет к выпадению для 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]; 
}