이 오류를 디버그하는 데 문제가 있습니다. 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가 로컬이 아닌 인스턴스 변수 여야합니다.
선언 지역 변수. – rmaddy
예! 정말 고맙습니다. 당신은 최고입니다. – erosebe
귀하의 질문에 대한 답을 모르겠지만 귀하의 출처에서 CLang 정적 분석기를 사용하는 것이 도움이 될 수 있습니다. 그것은 대단히 나를 도왔습니다. 오른쪽의 Xcode 메뉴 중 하나의 하위 메뉴에서 "분석"을 선택합니다. –