【问题标题】:How to stop xcode debugger from mangling filesystem NSURLs on OS X?如何阻止 xcode 调试器在 OS X 上修改文件系统 NSURL?
【发布时间】:2015-06-30 13:04:55
【问题描述】:

我正在尝试编写一个转换文件的 Mac 应用程序。我一开始就卡住了,因为我的应用程序无法打开本地文件,至少在调试器中运行时是这样。我使用 NSOpenPanel 创建一个有效的文件 NSURL:

“file:///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
    }
}

【问题讨论】:

  • 这不是因为 Xcode 正在破坏你的 URL,而是因为你没有正确使用 URL。鉴于结果路径中的 file: 段,您似乎试图以不正确的方式将其转换为文件系统路径。如果需要路径,请务必使用NSURLpath 方法。
  • 我正在使用 fileUrlWithPath 方法。在 Swift 中,我使用 url 字符串,并将其用作 fileUrlWithPath 的参数: xmlInFileURL = NSURL.fileURLWithPath(xmlInFilePath)
  • xmlInFilePath 很可能代表一个 URL 而不是文件路径。

标签: xcode macos debugging filesystems nsurl


【解决方案1】:

答案是NSURL.fileURLWithPath() 不接受 URL 路径作为参数,而只接受文件系统路径。所以"file:///Volumes/disk/file.xml" 是错误的,"/Volumes/disk/file.xml" 是正确的。

修改是 NSURL 将当前目录作为它认为是相对文件系统路径字符串的前缀。

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多