iOS 8完成块未被调用。

8
在我的应用程序中,我使用TTOpenInAppActivity在UIActivityController中插入“打开”操作。 内部工作原理如下: 某个视图控制器呈现已经构建好了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中完成处理程序从未被调用。 请帮忙找出这种行为的原因并使其正常工作。 提前感谢您。
1个回答

5
在iOS 8中,当你点击“打开时”,UIActivityViewController会自动关闭。因此,当你调用self.superViewController dismissViewControllerAnimated:completion:时,视图控制器已经被关闭了,这个方法什么也不做(所以不会调用完成处理程序)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接