我一直在尝试使用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)!;
线。我能帮忙吗?我做错了什么?
答案 0 :(得分:3)
查看NSFileHandle(forWritingToURL:error:)
的文档,它说:
初始化文件句柄对象,如果url中没有文件,则为nil。
所以这仅在文件已存在时才有效。这可能不是你想要的。
看起来NSFileHandle
根本无法创建新文件,所以在尝试打开文件之前我会使用以下内容:
NSFileManager.defaultManager()
.createFileAtPath(saveDialog.URL.path, contents: NSData(), attributes: nil)
这将创建一个空文件,然后您可以打开并将数据写入。