UIActivityViewController在iOS 11中不工作

UIActivityViewController在iOS 11中不工作,ios,objective-c,iphone,uiactivityviewcontroller,xcode9,Ios,Objective C,Iphone,Uiactivityviewcontroller,Xcode9,我正在使用UIActivityViewController共享文章url,使用以下代码 UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil]; activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivit

我正在使用UIActivityViewController共享文章url,使用以下代码

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil];

activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAirDrop]; 

[self presentViewController:activityVC animated:YES completion:nil];
上面的代码在iOS 9和10中工作,但在iOS 11中不工作

我调试了它,代码执行得很好,之后我在控制台中得到一个错误日志,如下所示

[ShareSheet]错误:等待建立与ShareUI视图服务扩展的连接时超时

有没有人面临这个问题?有解决办法吗


编辑:在清理并运行项目后,我尝试了同样的操作,在UIActivityViewController被打开2到3次后,我再次尝试,第一次我得到了相同的上述错误,第二次只有UIActivityViewController被打开。

我遇到了相同的问题,我发现我没有调用UI线程。尝试在UI线程中运行,并查看是否解决了问题

尝试以下操作:

    dispatch_async(dispatch_get_main_queue(), ^{
         UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil];

         activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAirDrop]; 
         dispatch_async(dispatch_get_main_queue(), ^{
               [self presentViewController:activityVC animated:YES completion:nil];
         });
    });

我也有同样的问题,但在Swift3中,它工作得很好。

所有修改用户界面的代码都需要在主队列中运行,这是经过设计的。因此,您需要做的就是:

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareItemArray applicationActivities:nil];

activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAirDrop]; 

dispatch_async(dispatch_get_main_queue(), ^{
    [self presentViewController:activityVC animated:YES completion:nil];
});
再解释一下:
dispatch\u async()
将把您传递给它的块排队,以便在不久的将来安全地更新UI时运行。如果在主队列上不这样做,可能会发生奇怪的事情(有时候UI根本不改变,或者旧的更改可以在新的更改之后应用,或者类似的事情)

UI中的用户操作(例如,点击按钮时在
iAction
中)发送消息的方法已经在主队列上运行,因此那里不需要
dispatch\u async()
(当然,假设您不是从另一个队列手动调用这些
iAction

请注意,
alloc
/
init
setExcludedActivityTypes:
不更新用户界面,因此无需调用主队列上的用户界面。

适用于swift 4.0

let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [shareItem], applicationActivities:nil)
activityViewController.excludedActivityTypes = [.print, .copyToPasteboard, .assignToContact, .saveToCameraRoll, .airDrop]

DispatchQueue.main.async {
   self.present(activityViewController, animated: true, completion: nil);
}

清理并运行一次,你确定你在建立与ShareUI视图服务扩展的连接时遇到了
超时问题。
在使用
UIActivityViewController
后,你能显示
shareItemArray
清理并运行它吗?兄弟,我收到了2到3次相同的超时错误,在此之后,uiactivityviewcontroller现在打开。在该shareItemArray中,我有下面的NSUrl only“”我想问题出在其他地方双倍主队列?为何只有
presentViewController:animated:completion:
需要在主队列中调用。哦,是的,伙计,你说得对。在我的例子中,我有一个HUD动画,为了更好地工作,我需要双队列。你有其他解决方案吗?嘿@Alejandro Iván我在打开共享视图并在日志中获取此错误时遇到崩溃,在等待与ShareUI视图服务扩展建立连接时超时。你能在这里帮忙吗?@samkitsah我不知道,我认为一些系统级服务正在失败。尝试重新启动您的设备(iPhone 6s或更低版本上的Power+Home,iPhone 7或更高版本上的Power+VolumeDown,当您看到Apple startup徽标时松开按钮)。