iOS应用程序中ViewController的深层链接仅在启动后运行一次

时间:2016-06-05 08:30:06

标签: ios iphone swift uiviewcontroller deep-linking

我正在使用以下代码深入链接(例如从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

此致 大卫。

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
}

希望它有所帮助: - )