我有一个应用程序列出了UITableView中的文件列表。这些文件是.ifc文件(3D效果图)我有我下载的另一个名为Field3D的应用程序,它显示下载的.ifc文件。目前我的应用程序确实下载了这个文件,我正在寻找使用UIActivityViewController,以便用户可以与Field3D应用程序共享此文件。我被告知应用程序间通信是要走的路,所以我做了一些研究并找到了这个https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html
现在它说,在向另一个应用程序发送文件和数据时,我所要做的就是以下内容:
- (void)displayActivityControllerWithDataObject:(id)obj {
UIActivityViewController* vc = [[UIActivityViewController alloc]
initWithActivityItems:@[obj] applicationActivities:nil];
[self presentViewController:vc animated:YES completion:nil];
}
但是我不相信这会像那样工作,因为我的UIActivityViewController代码很简单
NSData *pdfData = [NSData dataWithContentsOfFile:filePath];
UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:@[pdfData] applicationActivities:nil];
activityController.popoverPresentationController.sourceView = self.view;
[self presentViewController:activityController animated:YES completion:^{}];
有人可以帮助我并指出正确的方向吗?
答案 0 :(得分:1)
您应该可以使用UIDocumentInteractionController
让用户使用Field3D打开文件。
iOS应用程序作为“IPA”文件分发,该文件只是一个包含应用程序包和一些其他元数据文件的ZIP文件。我在iTunes中下载了Field3D并解压缩了IPA,然后查看了应用程序的Info.plist(使用plutil -convert json -r -o - Info.plist
)以查看它注册的文档类型。除此之外,它还将自己注册为com.tekla.collada3d.ifc
的处理程序,其文件扩展名为ifc
,com.tekla.collada3d.ifczip
的文件扩展名为ifczip
。
因此,如果您将文件存储在本地(可能位于应用程序沙箱的Documents
或Caches
目录中),扩展名为.ifc
或.ifczip
,那么您应该能够让Field3D只需通过使用(本地)文件的URL初始化UIDocumentInteractionController
来处理它。如果需要,您可以将交互式控制器的UTI
属性显式设置为com.tekla.collada3d.ifc
或com.tekla.collada3d.ifczip
,而不是依赖于文件扩展名。
有关详情,请参阅“Previewing and Opening Files” in Document Interaction Programming Topics for iOS。