2013-05-22 2 views
0

이 오류를 디버그하는 데 문제가 있습니다. Adobe 또는 Nook를 선택한 응용 프로그램으로 클릭하여 다운로드 PDF를 열면 EXC_BAD_ACCESS 오류가 발생합니다. 나는 디버거를 살펴 보았고, 내가 작성한 메소드 밖에서 어딘가를 깨뜨렸다. 여기에 문제의 코드가 있습니다.IOS 다른 앱에서 내 앱의 PDF를 여는 중 EXC_BAD_ACCESS

 //download protocol 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *storedEmail = [defaults stringForKey:@"email"]; 
    NSString *storedPassword = [defaults stringForKey:@"password"]; 
    NSString *projectID = self.study.ProjectID; 
    NSString *urlString = [NSString stringWithFormat:@"http://service.pharmatech.com/Document/projectprotocol/%@/%@/%@", storedEmail, storedPassword, projectID]; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    if (data) { 
     NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, [NSString stringWithFormat:@"Protocol_%@.pdf", projectID]]; 
     [data writeToFile:filePath atomically:YES]; 

     UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]]; 
     docController.delegate = self; 
     docController.UTI = @"com.adobe.pdf"; 
     self.navigationController.toolbarHidden = NO; 
     BOOL isValid = [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES]; 
     NSLog([NSString stringWithFormat:@"DISPLAYED? %d", isValid]); 

     NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:NULL]; 
     for (int count = 0; count < (int)[directoryContent count]; count++) { 
      NSLog(@"File %d: %@", (count + 1), [directoryContent objectAtIndex:count]); 
     } 

     [self.navigationController setToolbarHidden:YES animated:YES]; 

팝업은 pdfs를 표시 할 수있는 앱과 함께 표시됩니다. 하나를 클릭하면 Bad Access 오류가 발생하지만 버튼을 클릭하는 동작 인 this 메소드가 종료 될 때까지 오류가 발생하지 않습니다.

디버거를 사용하지 않고 앱을 실행하면 단순히 내 앱이 닫히고 아무 것도 열리지 않습니다. 누구나 어떤 조언이있어. 나는 아직도이 물건에 아주 새롭다.

EDIT : 나중에 이것을 방문하고 주석을 읽지 않은 사용자에게는 UIDocumentInteractionController가 로컬이 아닌 인스턴스 변수 여야합니다.

+2

선언 지역 변수. – rmaddy

+0

예! 정말 고맙습니다. 당신은 최고입니다. – erosebe

+0

귀하의 질문에 대한 답을 모르겠지만 귀하의 출처에서 CLang 정적 분석기를 사용하는 것이 도움이 될 수 있습니다. 그것은 대단히 나를 도왔습니다. 오른쪽의 Xcode 메뉴 중 하나의 하위 메뉴에서 "분석"을 선택합니다. –

답변

2

"docController"에 문제가있는 것 같습니다. 로컬 변수이며 인스턴스 변수 여야합니다.

변경

UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]]; 

docController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]]; 

과 당신의 .H에 당신은, 인스턴스 변수에`UIDocumentInteractionController`에를 참조하지 유지할 ​​필요가

UIDocumentInteractionController *docController; 
관련 문제