2017-12-18 87 views
0

我從網址下載視頻文件,並將其與該路徑保存在文件目錄:文件目錄路徑變化時重新申請

let destination: DownloadRequest.DownloadFileDestination = { _, _ in 
     let pathComponent = "pack\(self.packID)-\(selectRow + 1).mp4" 
     let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
     let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true) 
     let fileURL: URL = folderPath.appendingPathComponent(pathComponent) 
     return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) 
    } 

我的視頻被下載併成功播放。 但有一個問題,當我在Xcode中重建應用程序並嘗試播放我下載的最後一個視頻時,視頻不顯示,並且當我下載新視頻時,此保存併成功播放。

我已經看過每個視頻包的路徑,它們是不同的。

1 - 文件:///用戶/ myMac /庫/開發商/ CoreSimulator /設備/ EAC2F4CE-EA09-46C0-B403-1CE9E24B6822 /數據/集裝箱/數據/應用/ 1D2C1F7B-E627-4898-91C1 -D0AF8D5E0F1E/Documents/Downloads/pack7-1.mp4

2 - file:/// Users/myMac/Library/Developer/CoreSimulator/Devices/EAC2F4CE-EA09-46C0-B403-1CE9E24B6822/data/Containers/Data /應用/ F950E9A5-C9F3-4B8C-BCF5-647EEC233CEE /Documents/Downloads/pack7-3.mp4

現在,我的問題是,當我們更新從App Store應用程序,這意味着重新安裝?這條道路是否改變?

如何解決這個問題?

+0

@ivarun:不正確! iOS 8開始每次應用程序啓動時應用程序的絕對url變化看看https://stackoverflow.com/questions/26988024/document-or-cache-path-changes-on-every-launch-in-ios-8 –

+0

@ ivarun我在XCODE中反覆運行應用程序時在設備中測試它,而沒有卸載應用程序,這在設備中也是如此。 – ava

+0

@ava:你檢查了我發佈的答案嗎?沒有幫助嗎?還有什麼問題? –

回答

4

iOS 8起,應用程序沙箱的絕對url會在您每次重新啓動應用程序時發生變化。因此,您絕不應保存視頻的絕對網址。保存視頻的名稱,並在每次重新啓動應用時重新創建網址。

let pathComponent = "pack\(self.packID)-\(selectRow + 1).mp4" 
    let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
    let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true) 
    let fileURL: URL = folderPath.appendingPathComponent(pathComponent) 

一旦你有fileURL查找文件,你會發現在以前推出下載的文件。

iOS每次用戶啓動應用程序時都會爲應用程序創建一個新的Sandbox。因此絕對URL會非常。但是iOS會照顧到早期設置Sandbox內的所有文件夾和內容。因此,儘管SandBox的基礎網址發生變化,但所有內容的相對網址仍保持不變。

因此,它建議永遠不要將絕對網址保存到任何文件夾:)希望它有幫助

+0

someOne可以訪問文件目錄中的這個文件夾並複製這個文件夾的內容? – ava

+0

@ava:如果有人有權訪問iPhone,那麼是的:)您可以隨時將您的iPhone連接到Mac,並使用第三方應用程序打開應用程序沙箱並複製內容。如果您想要保護文件免受這些訪問,可以使用多種解決方案 –

+0

@ava:解決方案1:將文件保存在臨時文件夾中。保存在臨時文件夾中的內容都不受iCloud支持,也沒有應用程序可以訪問它們。但是一個問題是臨時文件夾中的內容不會持久。當應用程序被殺死時,臨時文件夾中的所有內容都將丟失:D因此,名稱temp。閱讀:https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html –