2017-08-31 52 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)更多信息。 –