使用 FileManager 返回 nil 的用户文档目录

User's document directory returning nil with FileManager

我正在尝试在本地写入文件但没有成功。当我尝试获取用户的文档目录时,它 returns nil 我相信这就是我的文件未被存储的原因。

此外,我对“用户的文档目录”的含义有很多疑问。是“iCloud Drive”中的“Documents/”还是“在我的 phone 上”。我应该在另一个地方而不是“文件”应用程序中寻找吗?我正在使用 iPhone 模拟器。

我的代码设计如下。 documentFolderURLfileURLurl 在调试时都是 nil。

let documentFolderURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
        let ext: String = type ?? "pdf"
        let name = "extrato." + ext
        let fileURL = documentFolderURL?.appendingPathComponent(name)
        do {
            if let url = fileURL {
                try file.write(to: url, options: .atomic)
            }
        } catch {...}

使用throwing API得到一个错误(应该有none)

do {
    let documentFolderURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    let ext: String = type ?? "pdf"
    let fileURL = documentFolderURL.appendingPathComponent(name).appendingPathExtension(ext)
    try file.write(to: fileURL, options: .atomic)       
} catch { print(error) }

看来你创建文件成功了,但你没有在正确的地方寻找它。

您可以通过以下方式导航到模拟器的 User Defaults 文件夹:

  1. 打印模拟器文档目录的文件路径。 print(documentFolderURL) 应该打印类似 file:///Users/yourname/Library/Developer/CoreSimulator/Devices/8DAF542C-4B37-41D1-BA43-1D7C2A32E585/data/Containers/Data/Application/63545C94-56F5-3B11-B601-543801BE717A/Documents/

  2. 复制整个 url EXCEPT 前导 file://(换句话说,从 /User/yourname...

    开始
  3. 打开 macbook 的 Finder 应用程序,然后按 command + shift + g。这将使您能够...(请打鼓)...

  4. 粘贴到 url 以导航到模拟器的文档目录。

你的文件应该在那里:)