2010-02-04 113 views
2

是否有人知道这样做的任何示例或开源代码?或者写一个解释如何做的文章?将文件传递给另一个Iphone应用程序

Apple有相当多的示例代码,可以在其他应用程序中打开网址。但是我找不到任何应用程序要求另一个应用程序打开存储在手机中的文件的示例。

谢谢。

回答

9

有两种方法可以做到这一点。

1)如果您可以将文件编码为字符串,则可以通过NSURL将它传递给其他应用程序。接收应用程序“ReceivingApp”必须实现其应用程序委托中的

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 

。发送您的数据使用

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"receivingapp://your.data.goes.here"]]]; 

2)使用pasteboard

我会使用自定义URL方案,因为它1)会为您节省几个步骤,并且2)它不会让操作系统的其余部分访问您的数据,如果接收应用程序出现问题。我不确定NSURL上的字符限制是什么,但它非常大。

+0

我认为在WWDC上,我听到苹果在谈论关于大量数据实际存储在某个文件的效率方面的问题。我认为你仍然可以使用URL方案,只需使用某种标志让其他应用程序知道检查粘贴板以及要查找的键。 – 2010-02-04 20:44:02

+0

没错。这就是我所说的“URL方案......将为您节省几步”即使您使用粘贴板,仍然必须使用URL方案让其他应用程序知道是时候从粘贴板中读取数据了。 – kubi 2010-02-04 20:48:40

+0

+1。不知道我怎么不知道UIPasteboard。这就是我在一段时间内不为iPhone写作的原因。显然,尽可能使用URL方案仍然是最佳选择。 – 2010-02-04 21:09:22

0

应用程序不能访问彼此的文件。

4

iPhone SDK没有官方认可的共享库 - 每个应用程序都是沙盒。如果数据不能通过URL方案传递,那么它必须通过“云”来完成。 Stanza通过将一些数据存储在DCIM文件夹中(其中包含用户的照片)来解决这个问题,但是Apple在几天前迫使他们删除了这些功能。

有传言说我们会在4.0 SDK中获得一个新的数据存储,但没有什么可靠的。

+0

我在NSURL类的引用中看到fileURLWithPath:isDirectory:方法。这有帮助吗? – 2010-02-04 20:15:08

+0

不可以。您只能访问应用程序包中的文件(“沙箱”意思是什么),同样,其他应用程序也无法读取它们。 – 2010-02-04 20:16:27

1

我的理解(虽然我可能完全错了),应用程序可以访问其他应用程序的文件,但发现它们是问题,因为每个应用程序的目录在安装时都会分配一个新的UUID,和应用程序不能列出/ Applications目录的内容。

如果您自己编写两个应用程序,您可以使用custom URL scheme将一个应用程序文件的位置传递给另一个应用程序。另外,如果文件足够小,则可以将其作为URL的一部分传递。

+0

尽管我没有测试过这个,但我确信这是正确的 - 我记得在WWDC Apple讨论使用URL方案时有效地将大量数据传递给其他应用程序,并且我知道文件涉及某种方式 - 可能是TMP目录呢? – 2010-02-04 20:39:49

0

要扩大到弗兰克的回应一点,我想你可以使用自定义URL与文件路径 - 但我认为你应该使用的路径将在缓存目录中的某些地方:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachePath = [paths objectAtIndex:0]; 

我假设其他应用程序可以看到这个相同的空间。

0

除了其他答案提到的自定义URL方案之外,您可以通过在通过AddressBook API创建的临时联系人的字段中存储加密的数据来破解这一点。

相关问题