无法在Safari Swift中打开本地文件

时间:2017-12-21 09:38:13

标签: ios swift safari openurl

无法在safari中打开本地文件Swift openUrl返回false

 let url = URL(string:"file:///Users/kiwitech/Library/Developer/CoreSimulator/Devices/FFA6761D-D98B-4C41-ACEF-18249F297897/data/Containers/Data/Application/82EF4E60-F9E9-434B-B86B-0391052D1E6E/Documents/proposals_dataxlsx.xlsx");


            print("Local URL",url)
            if UIApplication.shared.canOpenURL(url!) {
                if #available(iOS 10.0, *) {
                    UIApplication.shared.open(url!, options: [:],completionHandler: {
                        (success) in
                        print("Open  \(success)")
                    })
                } else {
                    UIApplication.shared.openURL(url!)
                }
            }

2 个答案:

答案 0 :(得分:0)

文件网址应与数据(contentsOf:url)一起使用以加载,但如果要打开它,则应使用https://developer.apple.com/documentation/uikit/uidocumentinteractioncontroller代替。

答案 1 :(得分:0)

这只是正确的。找到canopenURL:定义。

  

返回一个布尔值,指示URL的方案是否可以   由设备上安装的某个应用程序处理。

这意味着每当您查询 canOpenURL :()时, iOS都会看到是否已为您要求的方案注册任何已安装的应用,如果它无法进行找到任何东西,然后它会返回false。

由于返回的URL没有附加任何方案,canOpenURL将返回false。如果你想在Safari中打开一个URL,它应该以 http://或https:// 开头,这些是为Safari注册的方案。

还有一件事是,对于canOpenURL(:),要正常工作,您需要将方案列入白名单。你可以在这里找到更多相关信息。 https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl

如果您已注册自定义方案,则当您点击打开(网址)时,相应的应用将会打开。

还有一件事,永远不要像下面那样硬编码。

let url = URL(string:"file:///Users/kiwitech/Library/Developer/CoreSimulator/Devices/FFA6761D-D98B-4C41-ACEF-18249F297897/data/Containers/Data/Application/82EF4E60-F9E9-434B-B86B-0391052D1E6E/Documents/proposals_dataxlsx.xlsx");

使用NSSearchPathForDirectoriesInDomains,在目录中创建或搜索文件。

NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"New Folder"];