본문 바로가기
연구하기/iOS App Dev

MPMoviePlayerViewController 에서 중복된 Notification 호출 문제 원인 및 처리방안

by 썰렁황제 2012. 8. 9.

MPMoviePlayerViewController 에서 중복된 Notification 호출 문제 원인 및 처리방안


조건:

  1. MPMoviePlayerViewController 사용.

  2. NSNotificationCenter 에 MPMoviePlayerPlaybackDidFinishNotification 등록

  3. 초기화 시점에 재생할 파일명을 넣어둠 (initWithContentURL)

  4. 직후 shouldAutoplay = YES, repeadMode = NO 설정

  5. 최종적으로 presentMoviePlayerViewControllerAnimated 사용

  6. 영상이 매우 짧음. 시작하자마자 종료되는 수준. 0.1초 이내가 아닐까?

  7. 일단은 아이패드에서 발생했음. 하지만 아이폰도 발생하는 것으로 보임.

  8. 실제로는 좀 더 복잡한 조건이 있으므로, 위의 조건을 만족시켜도 발생하지 않을 수 있음. 따라서 위의 문제가 발생한 분들만 참조하는 것이 좋을 것으로 보임.


발생 현상:

  1. NSNotificationCenter 로부터 2번의 MPMoviePlayerPlaybackDidFinishNotification 이 호출됨.

  2. FinishReason 도 같기 때문에 두 호출을 구분하는 것이 불가.

  3. 두번 연속으로 호출되다보니 해당 호출에 대해 사용자에게 팝업 등으로 알리는 경우 팝업이 두번 뜬다거나 하는 오작동 발생. 코딩 조건에 따라 최악의 경우 어플리케이션 비정상 종료도 발생


해결 방안 :

  1. 인자 없는 초기화 함수를 사용하고, 모든 프로퍼티 설정이 맞춰졌을 때 파일명 대입

  2. shouldAutoplay 반드시 OFF

  3. 반드시 presentMoviePlayerViewControllerAnimated 호출 후에 play 함수를 사용하여 재생


원인 분석 (부정확) :

  1. shouldAutoplay 옵션이 YES 일 때, 파일이 설정된 상태면 즉시 재생되는데, Modal 로 MoviePlayerViewController 가 올라가는 시점에 재생이 종료되어 버리면, 내부 로직의 타이밍 문제에 의해 Notification 이 두 번 통지되는 것으로 보임.

  2. Modal 의 종료 타이밍과 영상의 종료 타이밍이 일치되는 것을 전제조건으로 둔 것이 아닐까 하는 생각. 모달 시작 시 애니메이션 중 영상이 종료되어 버리면 Modal 종료보다 영상이 먼저 끝나버리므로 이와 연관된 문제에 의해 발생한 것이 아닐까?

  3. 확실하게 파악된 것은 없으며 위와 같이 대응하면 일단 처리된다. 버그 수정해 주려나?


반응형