我正在使用以下代码深入链接(例如从Safari浏览器)到我应用中的特定ViewController:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool{
if(url.host == nil){
window?.rootViewController?.performSegueWithIdentifier("DeepLinkSegue", sender: nil)
print("Push-VC opened!")
print(window?.rootViewController)
print(window)
}
return true
}
在Safari浏览器中输入dlapp://时,应该打开带有segue标识符“DeepLinkSegue”的ViewController。这很好,ViewController打开。
但是在启动应用程序后只有一次。当您转到另一个VC并再次尝试使用“dlapp://”打开特定VC时,只需打开应用程序,而不是特定的VC。您必须重新启动应用程序,否则它将无法工作,只打开应用程序而不是特定的VC。
我首先认为该功能可能只被调用一次。但不是这样,因为打印(“DL-VC打开!”)总是打印。在我的代码中使用三个print()函数在控制台中输出:
Push-VC opened!
Optional(<DeepLinkTest.ViewController: 0x157da1d40>)
Optional(<UIWindow: 0x157da3830; frame = (0 0; 414 736); autoresize = W+H; gestureRecognizers = <NSArray: 0x157da4a90>; layer = <UIWindowLayer: 0x157da1530>>)
您可以在此处下载项目以重现问题:http://www.filedropper.com/deeplinktest_1
此致 大卫。
答案 0 :(得分:2)
问题是segue将逐个呈现vc,然后你无法让rootviewcontroller执行segue,尝试更改rootviewcontroller,如下所示:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool{
if(url.host == nil){
let sb = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateInitialViewController()
window?.rootViewController = vc
window?.rootViewController?.performSegueWithIdentifier("DeepLinkSegue", sender: nil)
print("Push-VC opened!")
print(window?.rootViewController)
print(window)
}
return true
}
希望它有所帮助: - )