url.isFileReferenceURL()在IOS中为本地文件返回false

时间:2014-11-08 12:21:01

标签: ios xcode swift

我在另一个应用程序的应用程序中打开了一个PNG文件。

它调用application(application: UIApplication, handleOpenURL url: NSURL) -> Bool这个函数。

以下是我测试即将到来的文件是否有效的方法:

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
    var rootViewController : ViewController = self.window?.rootViewController as ViewController
    println("the received url is \(url) and \(url.isFileReferenceURL())")
    if url.isFileReferenceURL() {
        rootViewController.handleOpenURL(url)
        return true
    }

    return false
}

但是在调试时,url.isFileReferenceURL()对于示例文件链接返回false,如下所示:

file:///private/var/mobile/Applications/56-random-identifier/Documents/Inbox/whatever.png

这里发生了什么?为什么本地文件的函数返回false?谢谢!

1 个答案:

答案 0 :(得分:19)

你误解了-isFileReferenceURL的含义。我猜你是否对URL是文件网址感兴趣;也就是说,它是指本地文件而不是远程资源。为此,您应致电-isFileURL或等效地检查fileURL属性(例如url.fileURL)。

文件网址有两种形式。有文件路径URL和文件引用URL。文件路径URL基于路径,正如您所期望的那样。如果移动了引用的文件,则URL不会将其跟踪到新位置。如果在路径上创建了不同的文件,则URL将引用该新文件。

文件引用URL是指文件系统中的基础文件对象,与路径无关。如果文件在同一卷中移动或重命名,则URL将跟踪该文件。即使它的路径发生了变化,它也会继续引用它。

您可以使用-filePathURL-fileReferenceURL在两种风格之间来回转换。您可以使用-isFileReferenceURL确定风味。

使用任何WithPath:方法创建文件URL时,您将获得文件路径URL。这就是您看到-isFileReferenceURL返回false的原因。