25

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

LaunchServices:调用了 invalidationHandler

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

4

6 回答 6

26

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

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

    presentationController.sourceView = sender; // if button or change to self.view.
}
于 2014-09-18T01:00:33.027 回答
5

查看开发者论坛:“该日志消息并未表明您有任何错误。”

于 2014-10-04T04:24:44.287 回答
2

我在 UIDocumentInteractionController 上遇到了类似的问题,当我在外面点击以将其关闭,或选择另一个应用程序来打开文档时,它会崩溃,并显示两次“LaunchServices:invaleationHandler called”控制台消息(仅使用 iOS 8) .

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

dispatch_async(dispatch_get_main_queue(), ^() {

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

});
于 2014-10-22T19:21:28.527 回答
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;
}
于 2014-09-18T05:36:32.327 回答
0

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

于 2014-09-27T03:13:41.667 回答
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.
    }
于 2014-10-30T03:17:23.080 回答