2010-02-04 69 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創建的臨時聯繫人的字段中存儲加密的數據來破解這一點。