2015-03-30 27 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