8

내 앱에서 TTOpenInAppActivity를 사용하여 UIActivityController 내부에서 "열기"작업을 삽입하고 있습니다. 그것은 내부 는 다음과 같이 작동ios 8 완료 블록이 호출되지 않았습니다.

일부 뷰 컨트롤러가 TTOpenInActivity가 이미 내장 된 UIActivityController를 제공

-(void)openWithAction 
{ 
    NSURL *fileURL = SOME_URL; 
    CGRect rect = SOME_RECT; 
    TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:self.view andRect:rect]; 
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fileURL] applicationActivities:@[openInAppActivity]]; 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ 
     // Store reference to superview (UIActionSheet) to allow dismissal 
     openInAppActivity.superViewController = activityViewController; 
     // Show UIActivityViewController 
     [self presentViewController:activityViewController animated:YES completion:NULL]; 
    } else { 
     // code for iPad, irrelevant 
    } 
} 

사용자가 버튼 "에서 열기"탭하면 다음과 같은 방법은 트리거된다.

- (void)performActivity 
{ 
    if(!self.superViewController){ 
     [self activityDidFinish:YES]; 
     return; 
    } 

    // Dismiss activity view 
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ 
     // iPhone dismiss UIActivityViewController 
     [self.superViewController dismissViewControllerAnimated:YES completion:^(void){ 

      if (self.fileURLs.count > 1) { 
       [self openSelectFileActionSheet]; 
      } 
      else { 
       // Open UIDocumentInteractionController 
       [self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject]; 
      } 
     }]; 
    } else { 
     // code for iPad, irrelevant 
     } 
    } 
} 

앱이 iPhone 전용이므로 다음 코드를 실행해야합니다.

[self.superViewController dismissViewControllerAnimated:YES completion:^(void){ 

       if (self.fileURLs.count > 1) { 
        [self openSelectFileActionSheet]; 
       } 
       else { 
        // Open UIDocumentInteractionController 
        [self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject]; 
       } 
}]; 

iOS7에서 모든 것이 잘 동작합니다. iOS8에서는 UIActivityController가 해제되고 아무 일도 일어나지 않습니다. 디버깅하는 동안 iOS8 완료 핸들러가 호출되지 않는 것을 감지 할 수있었습니다.

제발,이 동작에 대한 이유를 찾아서 제대로 작동하도록 도와주세요.

미리 감사드립니다.

답변

5

iOS 8에서 "열기"를 탭하면 UIActivityViewController가 자동으로 닫힙니다. 따라서 self.superViewController dismissViewControllerAnimated:completion:에 전화 할 때 viewController는 이미 닫혀 있고 메서드는 아무 것도하지 않으므로 완료되지 않습니다.

관련 문제