无法在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!)
}
}
答案 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"];