如何从Swift中的NSSavePanel对象中获取路径

时间:2015-03-30 19:37:36

标签: macos cocoa swift

我一直在尝试使用NSSavePanel将文本文件保存在用Swift编写的程序中。唯一的问题是每次我尝试使用URL属性时,它都有一个nil值。是的,测试时我在输入中选择了一个文件夹和一个文件名。这是我的代码:

    let saveDialog = NSSavePanel();
    saveDialog.beginWithCompletionHandler() { (result: Int) -> Void in
            if result == NSFileHandlingPanelOKButton {
                let file = NSFileHandle(forWritingToURL: saveDialog.URL!, error: nil)!;
                for match in Globals.matches {
                    if let data = (match.toString() as NSString).dataUsingEncoding(NSUTF8StringEncoding) {
                        file.writeData(data);
                    }
                }
            }
        }
    // other setup code not shown

当我运行它时,我总是在

上获得Swift等效的空指针异常
let file = NSFileHandle(forWritingToURL: saveDialog.URL!, error: nil)!;

线。我能帮忙吗?我做错了什么?

1 个答案:

答案 0 :(得分:3)

查看NSFileHandle(forWritingToURL:error:)的文档,它说:

  

初始化文件句柄对象,如果url中没有文件,则为nil。

所以这仅在文件已存在时才有效。这可能不是你想要的。

看起来NSFileHandle根本无法创建新文件,所以在尝试打开文件之前我会使用以下内容:

NSFileManager.defaultManager()
    .createFileAtPath(saveDialog.URL.path, contents: NSData(), attributes: nil)

这将创建一个空文件,然后您可以打开并将数据写入。