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

Posted

技术标签:

【中文标题】使用 FileManager 返回 nil 的用户文档目录【英文标题】:User's document directory returning nil with FileManager 【发布时间】:2021-02-12 20:52:57 【问题描述】:

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

另外,我对“用户的文档目录”的含义有很多疑问。是“iCloud Drive”中的“Documents/”还是“我的手机上”。我应该在另一个地方而不是“文件”应用程序中寻找吗?我正在使用 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 ...

【问题讨论】:

【参考方案1】:

使用throwing API 获取错误(应该没有)

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) 

【讨论】:

那么文件已经写入成功了。【参考方案2】:

您似乎已成功创建文件,但您没有在正确的位置查找它。

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

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

    复制整个网址EXCEPT前导file://(换句话说,以/User/yourname开头...

    打开 Macbook 的 Finder 应用,然后按 command + shift + g。这将允许您...(请打鼓)...

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

你的文件应该在那里:)

【讨论】:

你是对的,我的文件在那里 :) 我只在模拟器内部查看。我只是不明白为什么 documentFolderURL 在调试时为零,但在打印时给了我一些价值。无论如何,非常感谢! 我真的不太熟悉调试(因为我也是新手)所以很遗憾我不知道。但很高兴你找到了文件! P.S.,如果你认为我的回答是正确的,你能接受它作为正确的解决方案吗?由于我是堆栈溢出的新手,这将有助于提高我的声誉?很高兴我能提供帮助!

以上是关于使用 FileManager 返回 nil 的用户文档目录的主要内容,如果未能解决你的问题,请参考以下文章

FileManager.contentsEqual 在比较复制的文件时返回 false

为啥 FileManager.default.attributesOfItem 在 NSFileCreationDate 中返回当前日期?

presentShareDialog 返回 nil 的原因是啥?

解析 PFUser.currentUser 返回 nil - Swift

为啥 FileHandle 不一致地返回“nil”

Swift iOS Firebase - 如果FirebaseAuth.FIRUser对象不是nil,它上面的.email怎么可能返回nil?