【问题标题】:ios 8 completion block not called未调用ios 8完成块
【发布时间】:2014-10-14 09:10:02
【问题描述】:

在我的应用程序中,我使用 TTOpenInAppActivity 在 UIActivityController 中插入“打开方式”操作。 里面是这样工作的:

一些视图控制器显示 UIActivityController 已经内置了 TTOpenInActivity。

-(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 中的完成处理程序从未被调用。

请帮我找出导致这种行为的原因并使其正常工作。

提前谢谢你。

【问题讨论】:

    标签: ios ios8 uiactivityviewcontroller uiactivity completion-block


    【解决方案1】:

    在 iOS 8 中,当您点击“打开方式”时,UIActivityViewController 会自动关闭。所以,当你调用self.superViewController dismissViewControllerAnimated:completion: 时,viewController 已经被解除并且方法什么也不做(所以没有调用完成)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多