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 打开文档的主要内容,如果未能解决你的问题,请参考以下文章

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift

swift swift_optional4.swift