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 退出後刪除檔案,但實際情況可能有所不同。