PDFKit加载子目录PDF失败求助:两种路径写法均无效
解决PDFKit加载子目录PDF文件失败的问题
嘿,我之前刚踩过这个坑!你遇到的问题大概率不是代码的问题,而是Xcode里文件夹的添加方式不对,或者PDF文件没被正确包含进Bundle里。咱们一步步来排查解决:
第一步:确认文件和目录的Bundle配置
- 先去Finder里检查你的项目结构:确保
mydirectory文件夹确实在项目根目录下,而且mypdf1.pdf真的在这个子文件夹里。 - 打开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
相关产品推荐
相关产品推荐

