首页 > 解决方案 > 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

如您所见,路径相同,但在第二次尝试时它不起作用。求救,我的脑子快要炸了!

谢谢!

标签: iosswiftxcode

解决方案


终于明白了,我发现出于安全原因,从 UIDocumentPickerView 获得的 url 将在一段时间后被解除,所以我没有保存 url,而是从 url 保存了资产。


推荐阅读