LaunchServices:invalidationHandler被调用 - iOS 8共享表

时间:2014-09-10 07:14:08

标签: ios8 xcode6 uiactivityviewcontroller slcomposeviewcontroller

在我使用SLComposeViewController打开Twitter或Facebook共享表的时候,在日志中看到此错误消息,尽管不一致。我没有使用任何新的iOS 8 API,只是测试iOS 8上的现有代码。我看到其他人遇到了这个问题,甚至在使用Cocoa Touch SDK中的其他模态视图控制器时也发生了崩溃。

  

LaunchServices:invalidationHandler,名为

iOS 8中的SLComposeViewControllerUIActivityViewController是否有新的预防措施?还有什么要考虑的吗?

6 个答案:

答案 0 :(得分:26)

在您展示活动视图控制器后添加此代码:

if ([activityVC respondsToSelector:@selector(popoverPresentationController)])
{
    // iOS 8+
    UIPopoverPresentationController *presentationController = [activityVC popoverPresentationController];

    presentationController.sourceView = sender; // if button or change to self.view.
}

答案 1 :(得分:5)

查看developer forums:"该日志消息并未表示您的任何错误。"

答案 2 :(得分:2)

我在UIDocumentInteractionController中遇到了类似的问题,当我在它外面点击它以解除它,或者选择另一个应用程序来打开文档时,它会在" LaunchServices:invalideationHandler中被称为"控制台消息显示两次(仅使用iOS 8)。

解决方法是将对presentOpenInMenuFromRect:inView:animated的调用添加到主队列,即

dispatch_async(dispatch_get_main_queue(), ^() {

[self.documentInteraction presentOpenInMenuFromRect:theRect inView:self.view animated:YES];

});

答案 3 :(得分:0)

您可能还需要定义sourceRect。我使用以下代码从tableView中显示SLComposeViewController。

if ([controller respondsToSelector:@selector(popoverPresentationController)]) {
    //get rect for this row in table
    CGRect frame = [self.tableView rectForRowAtIndexPath:indexPath];

    //convert table row frame to view reference
    CGRect frameInView = [self.tableView convertRect:frame toView:self.view];

    [controller popoverPresentationController].sourceRect = frameInView;
    [controller popoverPresentationController].sourceView = self.view;
}

答案 4 :(得分:0)

关于自动关闭(不是崩溃): 我认为这可能与您尝试分享的链接有关。我试图发布音乐链接时看到同样的事情(Spotify,SoundCloud,...)。如果我通过指向某些非媒体内容的链接替换链接,则相同的推文有效。我会在此处提供雷达,看看它是否有意......

答案 5 :(得分:0)

这为我删除了错误消息并按预期工作。你必须摆脱调用" isAvailableForServiceType的if语句:"

看起来应该是这样的。快乐的编码。

    SLComposeViewController *tweetSheet = [SLComposeViewController
                                           composeViewControllerForServiceType:SLServiceTypeTwitter];

    [tweetSheet setInitialText:@"Great fun to learn iOS programming at appcoda.com!"];
    [self presentViewController:tweetSheet animated:YES completion:nil];

    if ([tweetSheet respondsToSelector:@selector(popoverPresentationController)])
    {
        // iOS 8+
        UIPopoverPresentationController *presentationController = [tweetSheet popoverPresentationController];

        presentationController.sourceView = sender; // if button or change to self.view.
    }