iOS Document Interaction 編程指南

Document Interaction是為你的app提供把文件傳輸給其它app和接收其它app傳來的文件的功能,網(wǎng)上的Document Interaction教程都是比較老的,為此附上2016最新Document Interaction教程。

注冊應(yīng)用程序支持的文件類型

打開項目的info.plist文件,在其中加上

<key>CFBundleDocumentTypes</key>

<array>

<dict>

<key>CFBundleTypeName</key>

<string>wzzyinqiang.guangyao-s-data</string>

<key>LSHandlerRank</key>

<string>Owner</string>

<key>LSItemContentTypes</key>

<array>

<string>com.microsoft.powerpoint.ppt</string>

<string>public.item</string>

<string>com.microsoft.word.doc</string>

<string>com.adobe.pdf</string>

<string>com.microsoft.excel.xls</string>

<string>public.image</string>

<string>public.content</string>

<string>public.composite-content</string>

<string>public.archive</string>

<string>public.audio</string>

<string>public.movie</string>

<string>public.text</string>

<string>public.data</string>

</array>

</dict>

</array>

這其中有不少配置屬性,一個一個講解。

CFBundleDocumentTypes這是一個主屬性,它代表你的app有著多種CFBundleTypeName,每種CFBundleTypeName有一個名字。

LSHandlerRank這是另一個屬性,它代表你的app接收到文件后是保存到沙盒還是其它的處理方式,Owner是保存到沙盒,這里我推薦大家就用Owner就可以了。(注意一定要是Owner,網(wǎng)上有的資料是owner,首字母如果沒有大寫,在上傳ipa時會報ERROR ITMS-90151的錯誤,當(dāng)時這個問題糾結(jié)了我好久……)

LSItemContentTypes這是你所支持的文件類型屬性,可以看到下面是一個array,其中有不少的文件類型,這里大家直接復(fù)制上面的就好,它包含了大部分的文件類型。

如何監(jiān)測你的app收到了文件?

如果你的app處于掛起狀態(tài),并以“其它應(yīng)用打開”這種方式重新激活了你的app,那么你可以在

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(nullableNSString*)sourceApplication annotation:(id)annotation

這個函數(shù)中來接收到該文件的url,用調(diào)用函數(shù)[NSData dataWithContentsOfURL:url]獲取到這個文件的data就可以對它操作了。

如果你的app根本沒有被打開,那么你可以在啟動函數(shù)

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

調(diào)用[launchOptions[UIApplicationLaunchOptionsURLKey]即可獲取到這個文件的url了。

創(chuàng)建并呈現(xiàn)DocumentInteraction Controller

self.documentController= [UIDocumentInteractionControllerinteractionControllerWithURL:[NSURLfileURLWithPath:self.file_path]];

[self.documentControllerpresentOpenInMenuFromRect:CGRectZeroinView:self.viewanimated:YES];

self是當(dāng)前的vc。

這里把documentController作為成員變量是因為如果你把documentController作為局部變量來創(chuàng)建和使用,在presentOpenInMenuFromRect函數(shù)調(diào)用后該局部變量就會被銷毀,因為已經(jīng)沒有指針指向它了,不知道這是不是一個官方bug,也可能是因為arc的問題,總之把它設(shè)置為成員變量是最簡單直接的解決辦法。

上面兩條代碼會造成短暫的卡頓,推薦把第一條代碼放到子線程。

DocumentInteraction Controller本身并不復(fù)雜,代碼量也很小,只是有一些配置的地方要注意。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • 應(yīng)用間通信 應(yīng)用程式只能間接與設(shè)備上的其他應(yīng)用進(jìn)行通信。您可以使用AirDrop與其他應(yīng)用程序共享文件和數(shù)據(jù)。您還...
    nicedayCoco閱讀 929評論 0 1
  • 通過iOS 8app extensions,我們可以選擇多種方式去分享我們app的功能。Document Prov...
    _淺墨_閱讀 7,397評論 4 12
  • iOS中的沙盒可以讓平臺更加的安全,這也是沙盒給用戶帶來的最主要好處。不過由于沙盒的嚴(yán)格限制,導(dǎo)致程序之間共享數(shù)據(jù)...
    SuperDanny閱讀 2,932評論 3 20
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評論 6 342

友情鏈接更多精彩內(nèi)容