NSOpenPanel / NSSavePanel在Swift 3

时间:2016-12-27 17:48:23

标签: macos swift3 macos-sierra nsopenpanel nssavepanel

在Swift 3 / Xcode8.1 / 10.12.2中我试图使用NSOpenPanel来获取一个带有以下代码的文本文件,由DenBeke编写

@IBAction func browseFile(sender: AnyObject) {

  let dialog = NSOpenPanel();

  dialog.title                   = "Choose a .txt file";
  dialog.allowedFileTypes        = ["txt"];

  if (dialog.runModal() == NSModalResponseOK)
  {
     let result = dialog.url // Pathname of the file

     if (result != nil) {
        let path = result!.path
        print("browseFile path: \(path)")
        //filename_field.stringValue = path
     }
  } else {
     // User clicked on "Cancel"
     return
  }
}

代码按预期打开一个打开的对话框,我可以选择一个文件。单击打开按钮会使应用程序崩溃。在控制台中我得到:

  

FI_TFloatingInputWindowController对象0x60800009c0c0在已经解除分配时被过度释放;在objc_overrelease_during_dealloc_error上打破调试

当我运行代码并打开对话框时,在控制台中我得到了

  

[默认] [错误]获取URL容器失败:file:/// Users / ruediheimlicher / Documents / LoggerdataDir / Messungen /,错误:错误域= BRCloudDocsErrorDomain代码= 12"未找到应用程序库:& #39; com.apple.Documents'" UserInfo = {NSDescription =未找到应用程序库:' com.apple.Documents'}

但这不会影响该应用。

网上有更多NSOpen或NSSave对话框的示例,但代码略有不同,但每个人都得到相同的结果:崩溃,以及控制台上完全相同的错误。

我的代码尝试中是否存在错误,甚至是与Swift3 / sierra一起使用的示例?

2 个答案:

答案 0 :(得分:6)

让您的应用访问<Your Project> -> <Your Target> -> Capabilities -> App Sandbox -> File Access -> User Selected File下的用户所选文件。

User Selected File Permission

答案 1 :(得分:3)

  

[默认] [错误]无法获取URL容器:file:/// Users / ruediheimlicher / Documents / LoggerdataDir / Messungen /,错误:错误域= BRCloudDocsErrorDomain代码= 12“未找到应用程序库:'com.apple .Documents'“UserInfo = {NSDescription =找不到应用程序库:'com.apple.Documents'}

要删除此输出,您必须在Finder首选项中启用iCloud Drive。

  • 打开发现者
  • 打开prefences
  • 选择第三个标签(补充工具栏)
  • 检查iCloud Drive

然后重新运行您的应用程序