2017-08-31 55 views
2

我在設備上保存的數據與此代碼寫入,並與迅速

let url = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent(fileName) 
print(fileURL) 
try data?.write(to: url) 

,我試圖用這個代碼

let url = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent(fileName) 
if let file = Bundle.main.url(forResource:url , withExtension: nil) { 

讀它,但我不知道如何讀取數據在讀取數據之前創建URL。我得到一個錯誤,告訴我,Bundle.main.url(forResource:正在等待一個字符串不是一個URL

+1

你要通過'如果讓文件= Bundle.main.url(forResource:url.lastPathComponent.deletingPathExtension(),withExtension:url.pathExtension)' – vadian

+0

@vadian爲什麼?該文件位於「文檔」文件夾中,而不是應用程序包。 – rmaddy

+0

@rmaddy我只是解釋了爲什麼* Bundle.main.url(forResource:正在等待一個字符串而不是一個URL *,同樣沒有更多,我不知道這個包是如何參與到工作流程中的。 – vadian

回答

2

如果你想讀取文件的內容Data類型的變量,你可以使用的Data初始化接受URL,它只有輸入參數。

Bundle.main.url(forResource:url , withExtension: nil)可用於訪問作爲應用程序包一部分的文件。但是,在上一行中,您將在文檔目錄中提供URL,因此看起來您的文件實際上並不是應用程序包的一部分,因此您不應使用該行代碼。

do { 
    let url = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent(fileName) 
    let data = try Data(contentsOf: url) 
} catch { 
    print("Error: cannot read file") 
} 
+0

「你的一部分應用程序包「,因此可以將應用程序包放置在應用程序包之外?是否有任何技術術語?您的意思是像從互聯網上下載的圖像嗎?您可以詳細說明嗎? – Honey

+0

包與目錄不完全相同。看看[Bundle編程指南](https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html#//apple_ref/doc/uid/10000123i)更多信息。 –