2015-04-22 37 views
0

我想寫一個轉換文件的Mac應用程序。我被困在一開始,因爲我的應用程序無法打開本地文件,至少在調試器中運行時。我用的是NSOpenPanel創建一個有效的文件NSURL:如何阻止xcode調試器在OS X上損壞文件系統NSURL?

「文件:///Volumes/Seagate_1tib/projects/dataskunk/wasteproduct.xml」

但在Xcode的某個地方,或者調試器或什麼的,這得到錯位成

「/Users/charlweed/Library/Developer/Xcode/DerivedData/dataskunk-ghkiumvdkopxarhavynetidlqxio/Build/Products/Debug/file:/Volumes/bigdrive/dataskunk/wasteproduct.xml」

讀取文件然後以「沒有這樣的文件或目錄錯誤」失敗。

如何在開發過程中防止這種損壞?

例如,這給出了錯誤,無論選擇什麼樣的文件:

let fileResult = openFileDialog("Choose File", message:"Message") 
let xmlInFileURLOpt: NSURL? = NSURL.fileURLWithPath(fileResult) 
if let xmlInFileURL = xmlInFileURLOpt 
    { 
    var xmlFileError: NSError?  
    if !xmlInFileURL.checkPromisedItemIsReachableAndReturnError(&xmlFileError){ 
     println("\(xmlFileError)") 
     return 
    } 
} 
+0

這不是因爲Xcode正在損壞您的URL,這是因爲您沒有正確使用該URL。給定結果路徑中的'file:'段,你似乎試圖把它變成文件系統路徑的方式不正確。如果你需要一個路徑,一定要使用'NSURL'的'path'方法。 – zneak

+0

請參閱[在objective-c中獲取NSURL的部分](http://stackoverflow.com/questions/3692947/get-parts-of-a-nsurl-in-objective-c) – zneak

+0

我正在使用fileUrlWithPath方法。在Swift中,我使用url字符串,並將其用作fileUrlWithPath的參數: xmlInFileURL = NSURL.fileURLWithPath(xmlInFilePath) – Charlweed

回答

0

答案是NSURL.fileURLWithPath()並不需要一個URL路徑作爲參數,只有一個文件系統路徑。所以"file:///Volumes/disk/file.xml"是錯的,"/Volumes/disk/file.xml"是正確的。

mangling是NSURL在當前目錄前加上它認爲是相對文件系統路徑字符串的前綴。