Objective-C - 应用间通信

时间:2015-12-09 04:16:21

标签: ios objective-c

我有一个应用程序列出了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:^{}];

有人可以帮助我并指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您应该可以使用UIDocumentInteractionController让用户使用Field3D打开文件。

iOS应用程序作为“IPA”文件分发,该文件只是一个包含应用程序包和一些其他元数据文件的ZIP文件。我在iTunes中下载了Field3D并解压缩了IPA,然后查看了应用程序的Info.plist(使用plutil -convert json -r -o - Info.plist)以查看它注册的文档类型。除此之外,它还将自己注册为com.tekla.collada3d.ifc的处理程序,其文件扩展名为ifccom.tekla.collada3d.ifczip的文件扩展名为ifczip

因此,如果您将文件存储在本地(可能位于应用程序沙箱的DocumentsCaches目录中),扩展名为.ifc.ifczip,那么您应该能够让Field3D只需通过使用(本地)文件的URL初始化UIDocumentInteractionController来处理它。如果需要,您可以将交互式控制器的UTI属性显式设置为com.tekla.collada3d.ifccom.tekla.collada3d.ifczip,而不是依赖于文件扩展名。

有关详情,请参阅“Previewing and Opening Files” in Document Interaction Programming Topics for iOS