iOS 使用UIDocumentPickerViewController選擇檔案

官方文件

UIDocumentPickerViewController(documentTypes:in:)

目前這個api的 in 參數提供四種模式,本次主要介紹 .open.import,其餘兩種模式暫不討論。

.open

let documentPicker = UIDocumentPickerViewController(documentTypes: [“public.item”], in: .open)

使用 .open 模式時,選擇的 URL 會直接指向檔案所在位置。由於 iOS app 僅能訪問自己 sandbox 內的檔案,若要存取 sandbox 外的檔案,需啟用權限。

開啟權限:透過 startAccessingSecurityScopedResource() 方法。

範例:假設有一個按鈕,點擊後彈出file browser並選取檔案。

先宣告fileUrl,表示被選取到檔案的URL。

讓ViewController遵從UIDocumentPickerDelegate

就可以把被選到的url存到fileUrl

fileUrl 要使用startAccessingSecurityScopedResource()開啟權限

之後動作完成後再關閉權限

就是呼叫stopAccessingSecurityScopedResource()

注意

.open 模式需在實機測試,模擬器無需 startAccessingSecurityScopedResource() 仍可讀取檔案,容易造成誤解。

.import

就是把參數in改成.import

let documentPicker = UIDocumentPickerViewController(documentTypes: [“public.item”], in: .import)

使用 .import 模式時,選取的檔案會被複製到暫存資料夾,因此無存取權限問題。

儲存位置:複製的檔案會存放在暫存資料夾,通常約一分鐘後自動刪除。官方文件指出,應在 app 退出後刪除檔案,但實際情況可能有所不同。

官方文件

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *