ios8中的UIDocumentInteractionController presentOptionsMenuFromBarButtonItem错误 - 提供了未知活动项

时间:2014-10-13 18:28:25

标签: ios objective-c ipad

UIDocumentInteractionController presentOptionsMenuFromBarButtonItem在ios8硬件中给出了控制台错误(而不是7.1硬件或更早版本):

 Unknown activity items supplied: (
    {
    "com.adobe.pdf" = ;
},
""
 )

在我的应用程序的官方App Store版本中,应用程序崩溃了。当我在iPad上编译并运行时,它只是给出错误但不会崩溃。

我的代码:

在.h:

UIDocumentInteractionController *docInteractionController;

在.m:

self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];

self.docInteractionController.delegate = self;
//UIBarButtonItem *element is an element in my toolbar
[self.docInteractionController presentOptionsMenuFromBarButtonItem:element animated:YES];

如果我执行docInteractionController.UTI NSLog,我会在控制台看到“com.adobe.pdf”,因此可以正确识别UTI。

我可以通过使用presentOpenInMenuFromBarButtonItem而不是presentOptionsMenuFromBarButtonItem为UIDocumentInteractionController调用来解决“未知活动项目”,但我想向用户显示打印和电子邮件选项,而不仅仅是外部应用程序打开选项。

在iPad 8.0.2版上测试过。 Xcode版本6.0.1,部署目标6.0(也使用部署目标8.0进行测试)。所有目标-c。在iPad 7.1版上运行不会产生错误。

4 个答案:

答案 0 :(得分:7)

见雷达:http://openradar.appspot.com/radar?id=5800473659441152

  • 如上所述,您可以使用presentOpenInMenu而不是presentOptionsMenu。您将松开邮件选项,但您可以使用MFMailComposeViewController和专用邮件按钮自行完成。
  • 或者将UIActivityViewController与“Open In”活动项目一起使用。
  • 或者只是没有“打开”活动项目的UIActivityViewController,如果这足够
  • 或者iOS7运行时的presentOptionsMenu和iOS8 +运行时的UIActivityViewController(存在共享扩展)

答案 1 :(得分:4)

对于不想使用UIActivityViewController的人,因为文档控制器是我们想要的(所有操作都显示出来):您可以通过保留UIDocumentInteractionController来解决崩溃问题。通过将其分配给属性并在文档交互完成时释放:

- (void)share:(id)sender
{
    self.documentInteraction = [UIDocumentInteractionController interactionControllerWithURL:_shareURL];
    _documentInteraction.delegate = self;
    _documentInteraction.name = self.title;

    [_documentInteraction presentOptionsMenuFromBarButtonItem:_actionItem animated:YES];
}

- (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller
{
    if (controller == _documentInteraction) {
        self.documentInteraction = nil;
    }
}

日志仍将显示,至少在调试中,尚未通过发布版本进行检查。但这一切都有效。

答案 2 :(得分:0)

这解决了我的问题:

dispatch_async(dispatch_get_main_queue(), ^() {
      [_docController presentOptionsMenuFromRect:button.bounds inView:button animated:YES];              
   });

答案 3 :(得分:0)

我获得了相同的控制台日志,但仅限于调试版本。尝试创建一个发布版本,您应该看到它仍然打印了提供的"未知活动项目"错误,但没有文件的全部内容。