iOS 应用程序中 ViewController 的深层链接仅在启动后有效
Deeplink to ViewController in iOS app only works once after start
我正在使用以下代码深入 link(例如从 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:// 时,它应该会打开 ViewController 并带有 segue 标识符“DeepLinkSegue”。工作正常,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
}
希望对您有所帮助:-)
我正在使用以下代码深入 link(例如从 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:// 时,它应该会打开 ViewController 并带有 segue 标识符“DeepLinkSegue”。工作正常,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
}
希望对您有所帮助:-)