SWIFT - NSCocoaErrorDomain,无法从 documentPicker 打开文档
Posted
技术标签:
【中文标题】SWIFT - NSCocoaErrorDomain,无法从 documentPicker 打开文档【英文标题】:SWIFT - NSCocoaErrorDomain, Can' t open Document from documentPicker 【发布时间】:2020-07-16 19:51:01 【问题描述】:我正在尝试通过 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
第 3 次尝试(tableView 中的 2 个项目)工作
/private/var/mobile/Containers/Data/Application/99FEC86E-75FC-4E0D-A236-BB2E8D9DED60/tmp/slovakianeast.Garage-Build-Inbox/New%20Recording%203.m4a
如您所见,路径相同,但在第二次尝试时它不起作用。 请帮忙,我的脑子快要炸了!
谢谢!
【问题讨论】:
【参考方案1】:终于明白了,我发现出于安全原因,从 UIDocumentPickerView 获取的 url 将在一段时间后被关闭,所以我没有保存 url,而是从 url 保存了资产。
【讨论】:
以上是关于SWIFT - NSCocoaErrorDomain,无法从 documentPicker 打开文档的主要内容,如果未能解决你的问题,请参考以下文章