2013-06-06 5 views
-2

Когда ARC включен, я не могу воспроизводить видео (видео загружается навсегда). Когда ARC выключен, я могу успешно воспроизводить видео. Я не знаю, почему и как редактировать мой код для воспроизведения видео с ARC on.Here мой кодARC отключает воспроизведение видео

-(IBAction)playMovie:(id)sender 
{ 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"big-buck-bunny-clip" ofType:@"m4v"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlaybackComplete:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:moviePlayerController]; 
    [self.view addSubview:moviePlayerController.view]; 
    moviePlayerController.fullscreen = YES; 
    [moviePlayerController play]; 
} 
- (void)moviePlaybackComplete:(NSNotification *)notification 
{ 
    MPMoviePlayerController *moviePlayerController = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:moviePlayerController]; 
    [moviePlayerController.view removeFromSuperview]; 

} 
+3

Вам необходимо сохранить ссылку на ваш MPMoviePlayerController или он будет освобождаться в конце «playMovie» – borrrden

+0

Смотрите комментарий borrrden и используя функцию поиска ... Этот вопрос задан и много раз ответил на SO. например http://stackoverflow.com/questions/11365791/mpmovieplayercontroller-not-playing-any-video-content-due-to-arc-and-memory-man – Till

ответ

0

есть несколько способов:

  1. Подведите MPMoviePlayerController в ваш вид делегата вместо локальной переменной. (Это лучший способ)
  2. Используйте CFRetain(), чтобы сохранить его вручную (эта функция CoreFoundation выполнит свою работу на объектах Objective-C без запуска ошибки ARC. Не забудьте извлечь ее, как только она выполнит свое задание, и CFRelease() .)
  3. Перейдите к настройкам проекта и отметьте этот файл флагом компилятора -fno-objc-arc. (Это сделает вашу память утечки кода, как ад.)
Смежные вопросы