问题
我想创建一个快速动作(3D Touch),允许用户直接进入游戏的统计部分。我的解决方案基于this教程的代码,并使用此代码。我添加了一些额外的代码,因为我想使用快速操作来执行与教程不同的操作。这是负责执行从初始视图到统计视图的segue的函数。它位于AppDelegate.swift:
来自AppDelegate.swift
func handleQuickAction(shortcutItem: UIApplicationShortcutItem) -> Bool {
var quickActionHandled = false
let type = shortcutItem.type.components(separatedBy: ".").last
if let shortcutType = Shortcut.init(rawValue: type!) {
switch shortcutType {
case .statistics:
quickActionHandled = true
// I use dispatchQueue to ensure that the segue occurs immediately
DispatchQueue.main.async {
self.window?.rootViewController?.performSegue(withIdentifier: "ARView_to_stats", sender: self.window?.rootViewController)
}
}
}
return quickActionHandled
}
从以下委托函数调用此函数:
来自AppDelegate.swift
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
completionHandler(handleQuickAction(shortcutItem: shortcutItem))
}
如果应用程序已关闭(从应用程序切换器/多任务处理视图),此设置可完美运行,并点击快速操作。但是,如果我在没有完全关闭应用程序的情况下回家并尝试执行相同操作,则不会转到统计视图,而是转到游戏视图。
我已经尝试了很多次,并且偶尔会崩溃,并发出以下消息:
com.apple.CoreMotion.MotionThread(11):EXC_BAD_ACCESS(code = 1,address = 0x48307beb8)
如何更改此设置以使其按预期工作。
我尝试了什么
答案 0 :(得分:0)
尝试这样的事情
var isQuickLaunched = false
var quickLaunchOption: Shortcut!
func handleQuickAction(shortcutItem: UIApplicationShortcutItem) -> Bool {
var quickActionHandled = false
let type = shortcutItem.type.components(separatedBy: ".").last
if let shortcutType = Shortcut.init(rawValue: type!) {
isQuickLaunched = true
quickLaunchOption = shortcutType
quickActionHandled = true
}
return quickActionHandled
}
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
completionHandler(handleQuickAction(shortcutItem: shortcutItem))
}
func applicationDidBecomeActive(application: UIApplication) {
if (isQuickLaunched == true) {
isQuickLaunched = false
switch quickLaunchOption {
case .statistics:
DispatchQueue.main.async {
self.window?.rootViewController?.performSegue(withIdentifier: "ARView_to_stats", sender: self.window?.rootViewController)
}
}
}
}