2011-01-10 2 views
1

다른 음악 파일을 재생하는 iPhone 응용 프로그램을 개발했습니다. 들어오는 전화 통화가 재생을 방해 할 때를 제외하고 모든 것이 잘 작동합니다. 이것은 다음 로그와 응용 프로그램 충돌 :AVAudioPlayer를 사용하여 오디오 파일을 재생할 때 iPhone이 멈추거나 수신 전화가 재생을 중단 할 때

START CRASH LOG를

END의 충돌 로그는

I 앱 위임의 applicationWillResignActive 방법에서 전화로 좁혀,하지만 난 할 수

Thread 0 Crashed: 

0 libobjc.A.dylib     0x32d98f20 objc_msgSend + 20 
1 AVFoundation     0x30739ddc AVAudioSessionPropertyListener(void*, unsigned long, unsigned long, void const*) + 284 
2 AudioToolbox     0x36d78bec SSServer_AudioSessionInterruptionListenerMessage + 316 
3 AudioToolbox     0x36d017bc _XAudioSessionInterruptionListenerMessage + 128 
4 AudioToolbox     0x36c68584 mshMIGPerform + 224 
5 CoreFoundation     0x3752f5c4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 22 
6 CoreFoundation     0x3752f582 __CFRunLoopDoSource1 + 158 
7 CoreFoundation     0x3752182e __CFRunLoopRun + 574 
8 CoreFoundation     0x37521504 CFRunLoopRunSpecific + 220 
9 CoreFoundation     0x37521412 CFRunLoopRunInMode + 54 
10 GraphicsServices    0x33e76d1c GSEventRunModal + 188 
11 UIKit       0x3591d574 -[UIApplication _run] + 580 
12 UIKit       0x3591a550 UIApplicationMain + 964 

앱이 배경 모드 (집 버튼을 눌러서)로 가면 앱이 올바르게 작동하기 때문에 전화가 걸려 올 때만 충돌하기 때문에 알아낼 수 없습니다.

applicationWillResignActive 방법에서 충돌이 발생 라인은 :

[navController popToRootViewControllerAnimated : NO] 없다 // navController는 UINavigationController의 인스턴스입니다. 이 명령문을 사용하여 모든보기 컨트롤러를 제거했으며 앱이 다시 시작될 때 첫 번째보기 컨트롤러를 눌러 앱이 처음부터 시작되도록합니다.

전화가 수신 된 경우에만이 충돌이 발생하는 이유는 누구나 알 수 있습니까?

+1

해결 했습니까? – user370773

답변

1

아주 비슷한 사고를 추적하고 있습니다. ,

특히 https://github.com/mattgallagher/AudioStreamer/issues/6

, MyAudioSessionInterruptionListener가 (혹은 콜백의 이름 에 전달 AudioSessionInitialize)에 그리고이 등록되어있어 이후 inClientData 변경 될 수있다 :

는 와우 여기에 설명하는 바와 같이 판명 따라서 콜백은 기본 객체가 할당 취소 된 경우라도 항상 현명한 작업을 수행해야합니다.

AudioStream에 제안 된 솔루션은 정적 변수를 사용하고 현재 콜백에 관심이있는 객체를 가리키고 해제되지 않은 객체를 가리 키지 않는 것이 좋습니다. 중요한 점은 inClientData를 사용하지 않는 것입니다.

관련 문제