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

如何复现UIDocumentUIPickerViewController的NSCocoaErrorDomain Code=260错误?

复现iOS 16+ UIDocumentPickerViewController崩溃的可行方案

问题背景

使用如下代码唤起文档选择器:

let documentPicker = UIDocumentPickerViewController(
  documentTypes: [String(kUTTypePDF), String(kUTTypeImage)], 
  in: .import
)
documentPicker.delegate = self
documentPicker.modalPresentationStyle = .fullScreen
present(documentPicker, animated: true, completion: nil)

正常流程下可在documentPicker(controller:url:)获取文件URL,但iOS16+用户出现崩溃,日志如下:

-[UIDocumentPickerViewController initForExportingURLs:asCopy:] must be called with a URL pointing to an existing file: Error Domain=NSCocoaErrorDomain Code=260 UserInfo (NSURL=file:///var/mobile/Containers/Data/Application/APP_ID/Documents/FILE.pdf, NSFilePath=/var/mobile/Containers/Data/Application/APP/Documents/FILE.pdf, (Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"))

可行复现方法

方法1:应用强制退出+未完成导入缓存

  1. 准备一个iCloud Drive中存储的1GB以上大文件(PDF/图片均可),确保文件已完整上传至iCloud
  2. 在iOS16+设备打开你的应用,唤起文档选择器并选中该大文件,等界面出现导入进度提示后,立刻从后台强制退出应用
  3. 重新打开应用,再次唤起文档选择器并选择同一个大文件,此时大概率触发崩溃——因为之前中断的导入缓存URL仍被引用,但对应本地文件已被系统清理

方法2:构造本地异常文件状态

  1. 打开iOS自带「文件」App,将一个iCloud中的文件移动到「我的iPhone」本地存储目录
  2. 在移动进度条显示时,立刻断开设备网络并强制退出「文件」App,让文件移动中断,出现“损坏/无法打开”状态
  3. 在你的应用中唤起文档选择器,选中这个状态异常的文件,文档选择器访问该URL时会因文件缺失触发崩溃

方法3:低网络环境中断文件下载

  1. 在iOS设置中开启「蜂窝网络」的低数据模式,并关闭Wi-Fi
  2. 在「文件」App中找到未下载到本地的iCloud文件(图标带云下载标识)
  3. 打开你的应用,唤起文档选择器并选中该文件,等下载/导入开始后立刻开启飞行模式中断网络
  4. 此时文档选择器尝试访问未完成下载的文件URL,会触发崩溃

核心触发逻辑

该崩溃本质是iOS16+的文档选择器会复用之前的文件缓存URL,但该URL对应的本地文件已被系统清理、移动或未完成写入,导致访问时触发“文件不存在”错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:05:21