在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上断点调试
当我运行代码并打开对话框时,在控制台中我得到以下信息:
[default] [ERROR] Failed getting container for URL: file:///Users/ruediheimlicher/Documents/LoggerdataDir/Messungen/, error: Error Domain=BRCloudDocsErrorDomain Code=12 "App library not found: 'com.apple.Documents'" UserInfo={NSDescription=App library not found: 'com.apple.Documents'}
但这不影响应用程序。
网络上有更多关于NSOpen或NSSave对话框的示例代码,但每个示例都会导致相同的结果:崩溃,并在控制台上显示完全相同的错误消息。
我的代码是否存在错误?是否有Swift3 / sierra的可用示例?