我在另一个应用程序的应用程序中打开了一个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?谢谢!
答案 0 :(得分:19)
你误解了-isFileReferenceURL
的含义。我猜你是否对URL是文件网址感兴趣;也就是说,它是指本地文件而不是远程资源。为此,您应致电-isFileURL
或等效地检查fileURL
属性(例如url.fileURL
)。
文件网址有两种形式。有文件路径URL和文件引用URL。文件路径URL基于路径,正如您所期望的那样。如果移动了引用的文件,则URL不会将其跟踪到新位置。如果在路径上创建了不同的文件,则URL将引用该新文件。
文件引用URL是指文件系统中的基础文件对象,与路径无关。如果文件在同一卷中移动或重命名,则URL将跟踪该文件。即使它的路径发生了变化,它也会继续引用它。
您可以使用-filePathURL
和-fileReferenceURL
在两种风格之间来回转换。您可以使用-isFileReferenceURL
确定风味。
使用任何WithPath:
方法创建文件URL时,您将获得文件路径URL。这就是您看到-isFileReferenceURL
返回false的原因。