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版上运行不会产生错误。
答案 0 :(得分:7)
见雷达:http://openradar.appspot.com/radar?id=5800473659441152
答案 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)
我获得了相同的控制台日志,但仅限于调试版本。尝试创建一个发布版本,您应该看到它仍然打印了提供的"未知活动项目"错误,但没有文件的全部内容。