【问题标题】:LaunchServices: invalidationHandler called - iOS 8 share sheetLaunchServices:invalidationHandler 调用 - iOS 8 共享表
【发布时间】:2014-09-10 07:14:08
【问题描述】:

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

LaunchServices:调用了 invalidationHandler

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

【问题讨论】:

  • 在 iOS 8.0 GM 中打开和关闭共享表时看到相同的日志。还没有答案。
  • 这里也一样。 UIActivityViewController 有很多 bug。
  • 这家伙为 Objective-C 想出来的......但我不确定如何在 Swift 中遵循他的答案。 stackoverflow.com/questions/25192313/…
  • 在另一个线程上查看我的答案:stackoverflow.com/a/25895667/2546659
  • 我也遇到了这个错误,并在调用 [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook] 并且设置中没有 Facebook 帐户时意识到它即将到来。我刚刚停止检查,因为它会自动处理没有帐户并显示消息。

标签: ios8 xcode6 uiactivityviewcontroller slcomposeviewcontroller


【解决方案1】:

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

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

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

【讨论】:

  • 我遇到了同样的问题......这个答案解决了崩溃问题,但仍然在控制台中收到“LaunchServices: invalidationHandler called”
  • 这是苹果端错误检查 devforums.apple.com/message/1049415#1049415> ,所以不要关心控制台警告。
  • 我真的永远也不会想到这一点。去苹果吧。
  • 或:presentationController.barButtonItem = sender;
【解决方案2】:

查看developer forums:“该日志消息并未表明您有任何错误。”

【讨论】:

【解决方案3】:

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

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

dispatch_async(dispatch_get_main_queue(), ^() {

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

});

【讨论】:

    【解决方案4】:

    您可能还需要定义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;
    }
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        这为我消除了错误消息并按预期工作。您必须摆脱调用“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.
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多