2017-05-12 44 views
0

我很困惑。我想存儲幾個用戶文件,但不是文檔。我正在使用:iOS中使用Swift的庫目錄

static var directory: URL { 
    get { 
     return FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0].appendingPathComponent("Caches").appendingPathComponent("OnlineFiles") 
    } 
} 

總是一樣的。每次啓動應用程序時,我都會得到不同的URL。 我做錯了什麼?我需要設置項目文件中是否有一些魔術開關?

一旦它是這樣的:

文件:///無功/移動/集裝箱/數據/應用/ 4547EF22-EB33-4B65-9772-67ED7870E3E9 /圖書館/緩存/ OnlineFiles

其他時間是:

文件:///無功/移動/集裝箱/數據/應用/ 83C8CDD7-B4D0-48B2-8A8E-9BD48C5D1754 /圖書館/緩存/ OnlineFiles

/Application /和/ Library /之間的這個字符串似乎是隨機的。第二次打開應用程序時,如何在稍後訪問它們時如何將文件存儲在一個位置?

[編輯]:如何獲得每次更新應用程序時不會更改的路徑?

+1

你的代碼沒問題。這是按預期工作的。爲什麼這是個問題? – rmaddy

+2

每次應用程序更新時(當您從Xcode重新安裝應用程序時也會發生這種情況),它會被放入不同的目錄中。只是不要使用絕對URL。 – Sulthan

+0

「應用程序/和/庫/之間的字符串」是應用程序UID – shallowThought

回答

1

這是蘋果的安全機制。每次重啓APP時,APP的蘋果沙箱路徑都要加密,以防止訪問其他程序。APP.So裏面的加密密鑰在程序結束之前,不管在哪裏要訪問APP沙箱,返回路徑是一樣的。如果你想知道更多,你可以看看蘋果的沙箱機制。

+0

這是很好的解釋,但不是答案。答案在Sulthan評論中提供:「不要使用絕對URL」,總是使用:currentLibraryDirectory.appendingPathComponent(relativePath) –