2015-03-30 32 views
0

我一直在尝试使用NSSavePanel保存书面斯威夫特程序的文本文件。唯一的问题是每次我尝试使用URL属性时,它都有一个零值。是的,我在测试时选择了一个文件夹并在输入中输入文件名。这里是我的代码:如何获得的路径出NSSavePanel对象在斯威夫特

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 

当我运行它,我总是得到一个空指针异常对

let file = NSFileHandle(forWritingToURL: saveDialog.URL!, error: nil)!; 

线雨燕等同。我可以请一些帮助吗?我究竟做错了什么?

+0

供参考:你不需要把';'放在分号的末尾 – 2017-11-04 21:08:43

回答

3

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

初始化文件句柄对象或零,如果没有文件存在于URL。

因此,如果该文件已经存在,这仅适用。这可能不是你想要的。

它看起来像NSFileHandle都不能创建新的文件,所以我只想用以下尝试打开文件之前:

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

这将创建一个空文件,然后你可以打开和把你的数据写入。

+0

谢谢你的工作就像一个魅力。 – sjbrimhall 2015-03-30 20:41:05