在 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“找不到应用程序库:'com.apple.Documents' " UserInfo={NSDescription=找不到应用程序库:'com.apple.Documents'}
但这不会影响应用程序。
网上有更多关于 NSOpen 或 NSSave 对话框的示例,代码略有不同,但对于每个人,我都得到相同的结果:崩溃,控制台上出现完全相同的错误。
我的代码尝试中是否有错误,甚至是适用于 Swift3/sierra 的示例?