2013-03-27 3 views
1

내 앱을 통해 iBooks에서 열려고하는 테스트 PDF 파일이 있습니다. 내 임시 디렉토리에 저장되고 난 아이북에로드 할이 코드를 사용 : 메뉴가 잘 팝업iBooks의 UIDocumentInteractionController 열기 PDF가

NSURL *targetURL = [NSURL fileURLWithPath:tempFullPath]; 
NSLog(@"Path is %@", tempFullPath); 
UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL:targetURL]; 
controller.delegate = self; 
controller.UTI = @"com.adobe.pdf"; 

[controller presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES]; 

하지만 난 아이북 버튼을 응용 프로그램 충돌을 누르고 내 엑스 코드를 끊으면.

내 NSLog 출력을 얻을 파일의 경로는 다음과 같이입니다 : 내가 잘못 뭐하는 거지

Path is /private/var/mobile/Applications/65EC4182-A79B-431C-9E74-BD72D91A31AB/tmp/TestFile.pdf 

? 미리 감사드립니다!

+1

콘솔에 표시된 오류는 무엇입니까? 스택 트레이스 란 무엇입니까? 앱 충돌은 어디에서 발생합니까? – rmaddy

+0

@rmaddy 앱은'UIDocumentInteractionController'pop에서 iBooks 아이콘을 누른 후 Xcode에서'Thread 1 : EXC_BAD_ACCESS (code = 1, address = blah blah)'메시지 만 얻은 후 정확히 충돌합니다. –

+1

좀비를 사용하도록 설정하고 메시지가 할당 취소 된 개체로 전송되는지 확인합니다. 대부분의 경우 문제는 'UIDocumentInteractionController'에 대한 참조를 보관하지 않아 너무 빨리 할당이 해제되는 것입니다. – rmaddy

답변

6

UIDocumentInteractionController을 사용하려면 완료 될 때까지 참조를 유지해야합니다. 즉, 로컬 변수가 아닌 인스턴스 변수를 사용해야합니다. 적절한 대리자 메서드를 구현하여 컨트롤러 완료시 ivar를 다시 설정할 수 있습니다.

좀비를 사용하면 이러한 문제를 디버그하는 데 도움이됩니다. 대부분의 경우 메시지가 할당 취소 된 개체 (컨트롤러)로 전송되고 있음을 알 수 있습니다.

+0

감사합니다. –

+0

정확히이 컨트롤러를 UIPopoverController로 사용하고, 완료 할 때까지 유지해야합니다! – VietHung

+0

@rmaddy 어떻게 사용할 수 있습니까? 나 한테 제발 제안 해 줄 수 있니? – Vvk

관련 문제