ios - SWIFT - NSCocoaErrorDomain,无法从 documentPicker 打开文档
问题描述
我正在尝试通过 UIDocumentPickerViewController 从选择的文档文件(本地)中创建数据,我正在疯狂地想弄清楚为什么有时即使文件存在我也会遇到 Error Domain=NSCocoaErrorDomain Code=260 错误。我已经尝试了几次代码,我发现如果我在 tableView 中有超过 5 个项目,那么它就不想工作了。
我正在使用 tableView,用户可以在其中添加单元格并添加图像、音频、视频等项目。当用户获取包含音频内容的单元格时,UIDocumentPickerViewController 将显示并执行此功能:
if documentType == "audio" {
print("INFO: Document(\(String(describing: documentType)) was picked at \(urls)")
documentType = nil
let audioItem = PostConstructor.CarBuild.audio(itemID: nil, audioURL: urls[0], index: self.items.count, loadedAudio: nil, itemType: PostProcessingFramework.CarBuildContentType.audio, title: "Edit your Audio clip title.", text: "Edit your Audio clip text.")
self.items.append(audioItem)
DataService.getDocumentType(fromPath: urls[0], completion: { ext in
print("INFO: File extension is: \(ext)")
})
}
}
我有带有 URL 的变量,并且我的整个数据结构都附加到 tableView 的项目中。在此项目中,您无法更改 URL,并且没有其他函数正在更改此变量。然后当用户想要上传他的作品时,将执行一个上传功能:
do {
print("audioURL: \(audioURL.absoluteString)")
let uploadData = try Data(contentsOf: audioURL)
//function continue .....
} catch {
print("ERROR: \(error)")
}
这就是问题所在,我已经尝试过这个功能几次,它有时会起作用,奇怪的是,如果我用(我的)音频之外的 4 个其他项目尝试它,并且只有 1 个音频项目它捕获了那个错误......但是在尝试 Data() 之前打印的变量...打印了在上次尝试中有效的 url。所以我的尝试是:
第一次尝试(tableView 中的 1 个项目)工作
/private/var/mobile/Containers/Data/Application/99FEC86E-75FC-4E0D-A236-BB2E8D9DED60/tmp/slovakianeast.Garage-Build-Inbox/New%20Recording%203.m4a
第二次尝试(tableView 中的 5 个项目)不起作用
/private/var/mobile/Containers/Data/Application/99FEC86E-75FC-4E0D-A236-BB2E8D9DED60/tmp/slovakianeast.Garage-Build-Inbox/New%20Recording%203.m4a
第三次尝试(tableView 中的 2 个项目)工作
/private/var/mobile/Containers/Data/Application/99FEC86E-75FC-4E0D-A236-BB2E8D9DED60/tmp/slovakianeast.Garage-Build-Inbox/New%20Recording%203.m4a
如您所见,路径相同,但在第二次尝试时它不起作用。求救,我的脑子快要炸了!
谢谢!
解决方案
终于明白了,我发现出于安全原因,从 UIDocumentPickerView 获得的 url 将在一段时间后被解除,所以我没有保存 url,而是从 url 保存了资产。
推荐阅读
- eclipse - 当我尝试从 Eclipse Marketplace 将 e(fx)clipse 下载到我的 Eclipse IDE 中时,如何解决此错误?
- bash - 如何重命名终端上的所有目录
- javascript - 全局存储来自服务器的数据
- python - str[0:z] 适用于 pandas 但不适用于 modin:TypeError: 'StringMethods' object is not subscriptable
- javascript - 如何在 Google 脚本的自定义“whenFormulaSatisfued”函数中传递范围对象?
- ruby - 如何通过读取 Ruby 中的文本文件来创建哈希?
- angular - ng build --prod Angular 中的 ./node_modules/ng2-material-dropdown/fesm5/ng2-material-dropdown.js 中的错误
- angular - 同时调用两个服务
- javascript - 使用 React Native Linking API 打开邮件客户端的选择
- reactjs - 如何在反应js中附加标签和样式,跨度方法