在我使用SLComposeViewController
打开Twitter或Facebook共享表的时候,在日志中看到此错误消息,尽管不一致。我没有使用任何新的iOS 8 API,只是测试iOS 8上的现有代码。我看到其他人遇到了这个问题,甚至在使用Cocoa Touch SDK中的其他模态视图控制器时也发生了崩溃。
LaunchServices:invalidationHandler,名为
iOS 8中的SLComposeViewController
和UIActivityViewController
是否有新的预防措施?还有什么要考虑的吗?
答案 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.
}