首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当应用程序已经打开时不能执行快速操作(Xcode 9)

当应用程序已经打开时不能执行快速操作(Xcode 9)
EN

Stack Overflow用户
提问于 2017-08-17 06:15:12
回答 1查看 174关注 0票数 0

问题

我想创建一个快速动作(3D触摸),允许用户直接进入游戏的统计部分。我的解决方案是基于教程中的代码,并让它使用这段代码。我添加了一些额外的代码,因为我想使用快速操作来做一些与教程不同的事情。这是一个函数,负责从初始视图到统计数据视图执行一个segue。它在AppDelegate.swift中:

来自AppDelegate.swift

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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)

我怎样才能改变它,使它按需要工作。

我试过什么

  • 去除DispatchQueue.main.async
EN

回答 1

Stack Overflow用户

发布于 2017-08-17 06:50:48

试试像这样的东西

代码语言:javascript
运行
复制
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)
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45727803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档