gpt4 book ai didi

ios - 深度链接到 iOS 应用程序中的 ViewController 仅在启动后有效

转载 作者:行者123 更新时间:2023-11-28 12:47:17 26 4
gpt4 key购买 nike

我正在使用以下代码深度链接(例如从 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://时,它应该打开带有转场标识符“DeepLinkSegue”的 ViewController。一切正常,ViewController 打开。

但仅在启动应用程序后一次。当您转到另一个 VC 并再次尝试使用“dlapp://”打开特定的 VC 时,只会打开应用程序,而不是特定的 VC。您必须重新启动应用程序,否则它将无法运行,只会打开应用程序而不是特定的 VC。

我一开始以为这个函数可能只被调用了一次。但并非如此,因为 print("DL-VC opened!") 总是打印。在我的代码中使用三个 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

问候,大卫。

最佳答案

问题是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
}

希望对您有所帮助:-)

关于ios - 深度链接到 iOS 应用程序中的 ViewController 仅在启动后有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com