You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDFKit加载子目录PDF失败求助:两种路径写法均无效

解决PDFKit加载子目录PDF文件失败的问题

嘿,我之前刚踩过这个坑!你遇到的问题大概率不是代码的问题,而是Xcode里文件夹的添加方式不对,或者PDF文件没被正确包含进Bundle里。咱们一步步来排查解决:

第一步:确认文件和目录的Bundle配置

  1. 先去Finder里检查你的项目结构:确保mydirectory文件夹确实在项目根目录下,而且mypdf1.pdf真的在这个子文件夹里。
  2. 打开Xcode的项目设置,切换到Build Phases标签页,找到Copy Bundle Resources列表。看看mydirectory/mypdf1.pdf是不是在里面——如果不在,点击下方的+按钮,选中你的PDF文件添加进去。

第二步:检查文件夹的添加方式(关键!)

这是最容易踩的坑:当你把mydirectory添加到Xcode项目时,一定要选择Create folder references,而不是Create groups!

  • 如果你选了Create groups,Xcode不会在Bundle里创建实际的子目录,所有文件都会被放到Bundle根目录下,这时候你用subdirectory参数自然找不到文件。
  • 重新添加文件夹的方法:右键项目 -> Add Files to "你的项目名" -> 选中mydirectory文件夹 -> 勾选Copy items if needed,然后选择Create folder references,最后点击Add。

第三步:验证路径并调试

你可以先打印Bundle里所有PDF文件的路径,确认你的目标文件是否存在:

let allPDFPaths = Bundle.main.paths(forResourcesOfType: "pdf", inDirectory: "mydirectory")
print("Bundle里的PDF路径:\(allPDFPaths)")

如果打印出来是空数组,说明子目录没被正确包含进Bundle;如果能看到mypdf1.pdf的路径,那代码层面就没问题了。

最后,修正后的代码(加了错误调试)

你之前的代码其实是正确的,只要路径配置对了就能运行,这里给你加了错误打印,方便排查:

if let documentURL = Bundle.main.url(forResource: "mypdf1", withExtension: "pdf", subdirectory: "mydirectory") {
    if let document = PDFDocument(url: documentURL) {
        pdfView.autoScales = true
        pdfView.backgroundColor = UIColor.lightGray
        pdfView.displayMode = .singlePageContinuous
        pdfView.displayDirection = .vertical
        pdfView.document = document
    } else {
        print("❌ 无法从URL初始化PDFDocument")
    }
} else {
    print("❌ 在Bundle子目录中找不到PDF文件")
}

按照上面的步骤排查,应该就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者AlbertB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:04:07