iOS 調起第三方程式開啟檔案 ( UIDocumentInteractionController )

來源:互聯網
上載者:User

項目中有個下載檔案功能,下載後需要能查看,總不能為每一種類型的檔案寫個查看功能吧.

好在iOS有個UIDocumentInteractionController ,可以幫你調起手機上已安裝的應用來查看檔案.


首先要配置一下info.plist檔案,告訴系統哪些類型的檔案需要使用UIDocumentInteractionController來開啟

也可以用在代碼裡設定UTI這個屬性,我沒試過哈,

plist裡面可以一波帶走,簡單省事

總結一下差不多就這些吧:

<key>CFBundleDocumentTypes</key>

<array>

<dict>

<key>CFBundleTypeName</key>

<string>com.myapp.common-data</string>

<key>LSHandlerRank</key>

<string>Default</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>

直接粘到info.plist就可以了.

先遵守這個代理協議:UIDocumentInteractionControllerDelegate

然後是代碼部分:

// 拿到下載的檔案路徑 NSString *filePath = [[LGDownloadManager sharedInstance] getFilePathWithURL:fileModel.url];;if (filePath == nil) return;// 轉成URLNSURL *url = [NSURL fileURLWithPath:filePath];    if (url) {            self.documentVC = [UIDocumentInteractionController interactionControllerWithURL:url];    [self.documentVC setDelegate:self];    BOOL canOpen =  [self.documentVC presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];            // 返回NO說明沒有可以開啟該檔案的愛屁屁, 友情提示一下    if (canOpen == NO) {        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"沒有找到可以開啟該檔案的應用" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];        [alert show];    }}

填坑: self.documentVC這個對象只在這一處用了, 我直接 UIDocumentInteractionController *documentVC = .....  不就行了.

我一開始就是這麼乾的,既然提了,那結果可想而知,還是太年輕了.

為什麼不行嘞?  

documentVC對像如果不被引用,出了大括弧就被釋放掉了,都成nil了,自然是彈不出來的,所有他必須作為self的一個成員變數被引用才能保證不被過早釋放掉





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.