从 swift 4 中的 Today 扩展程序打开时包含应用程序崩溃
Containing App crashes when opened from Today extension in swift 4
我有一个 swift 应用程序,我有一个今天的扩展程序,它有一个按钮可以打开包含的应用程序。
当应用程序在最近的列表中时,按钮可以完美地打开应用程序,但当应用程序从最近的列表中移出时,按钮会崩溃。
也没有崩溃日志
这是我在应用委托上的代码:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var mainViewController : MainViewController!
mainViewController = UIApplication.shared.keyWindow?.rootViewController?.childViewControllers[1].childViewControllers[0] as! MainViewController
if url.scheme == "open"
{
switch url.host
{
case "1"?:
mainViewController.isTaxi = true
break
case "2"?:
mainViewController.isPfp = true
break
case "3"?:
mainViewController.isDarbi = true
break
default:
break
}
}
return true
}
这是我在主界面打开的方式 VC :
var isTaxi : Bool? {
didSet{
if UserDefaults.getUser() != nil {
self.taxiRegViewController.show()
} else {
self.taxiNotRegViewController.show()
}
}
}
这是我在扩展程序中触发点击事件的地方:
@IBAction func bookTaxiTapped(_ sender: UIButton) {
if let url = URL(string: "open://\(sender.tag)")
{
self.extensionContext?.open(url, completionHandler: nil)
}
}
我通过像这样修改应用委托的方法解决了我的问题:
实际问题是:我们有 SWRevealViewController,它必须在调用其他视图控制器之前启动
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var mainViewController : MainViewController!
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyBoard.instantiateViewController(withIdentifier: "swRevealController") as! SWRevealViewController
mainViewController = storyBoard.instantiateViewController(withIdentifier: "mainView") as! MainViewController
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
viewController.setFront(mainViewController, animated: true)
if url.scheme == "open"
{
switch url.host
{
case "1"?:
mainViewController.isTaxi = true
break
case "2"?:
mainViewController.isPfp = true
break
case "3"?:
mainViewController.isDarbi = true
break
default:
break
}
}
return true
}
我有一个 swift 应用程序,我有一个今天的扩展程序,它有一个按钮可以打开包含的应用程序。
当应用程序在最近的列表中时,按钮可以完美地打开应用程序,但当应用程序从最近的列表中移出时,按钮会崩溃。
也没有崩溃日志
这是我在应用委托上的代码:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var mainViewController : MainViewController!
mainViewController = UIApplication.shared.keyWindow?.rootViewController?.childViewControllers[1].childViewControllers[0] as! MainViewController
if url.scheme == "open"
{
switch url.host
{
case "1"?:
mainViewController.isTaxi = true
break
case "2"?:
mainViewController.isPfp = true
break
case "3"?:
mainViewController.isDarbi = true
break
default:
break
}
}
return true
}
这是我在主界面打开的方式 VC :
var isTaxi : Bool? {
didSet{
if UserDefaults.getUser() != nil {
self.taxiRegViewController.show()
} else {
self.taxiNotRegViewController.show()
}
}
}
这是我在扩展程序中触发点击事件的地方:
@IBAction func bookTaxiTapped(_ sender: UIButton) {
if let url = URL(string: "open://\(sender.tag)")
{
self.extensionContext?.open(url, completionHandler: nil)
}
}
我通过像这样修改应用委托的方法解决了我的问题:
实际问题是:我们有 SWRevealViewController,它必须在调用其他视图控制器之前启动
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var mainViewController : MainViewController!
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyBoard.instantiateViewController(withIdentifier: "swRevealController") as! SWRevealViewController
mainViewController = storyBoard.instantiateViewController(withIdentifier: "mainView") as! MainViewController
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
viewController.setFront(mainViewController, animated: true)
if url.scheme == "open"
{
switch url.host
{
case "1"?:
mainViewController.isTaxi = true
break
case "2"?:
mainViewController.isPfp = true
break
case "3"?:
mainViewController.isDarbi = true
break
default:
break
}
}
return true
}