弹出另一个总是失败后立即推出一个新的WatchKit控制器

时间:2017-06-23 19:42:03

标签: ios swift watchkit

行。在经典的iOS中这很容易做到这一点,但是WatchKit没有给出任何块/闭包,并且在有/无动画之间没有选择。

我有一个根控制器,它有一个选项列表。触摸其中一个选项(在手表或手机上)将关闭所有当前打开的控制器(popToRootController),然后立即关闭push a new one

或多或少,如此:

self.popToRootController()
self.pushController(withName: "IKANHAZCHEEZEBURGR", context: nil)

问题是呼叫之间没有足够的时间,而且我没有lambda来执行信号量或推送控制器。

如果我单步执行调试器,它会发生,没问题。 如果我只是点击"跑,"没有用。 这就是所谓的a "heisenbug"

我想我可以做一次性计时器,但这似乎是一个可怕的黑客,它实际上可能会导致原力的中断。

有更好的想法吗?我错过了什么?

我知道iOS有很多答案。在这里,他们没有给我带来很多好处。

1 个答案:

答案 0 :(得分:0)

好吧,我屈服于黑暗面,并做了计时器黑客攻击。有用。我需要为每个打开的控制器提供大约0.4秒的时间。

这是我所做的近似:

self.popToRootController()
let _ = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.timerCallback(_:)), userInfo: nil, repeats: false)

func timerCallback(_ timer: Timer) {
    if let timerIndex = timer.userInfo as? Int {
        if 0 <= timerIndex {
            DispatchQueue.main.async {self.pushController(withName: "IKANHAZCHEEZEBURGR", context: nil)}
        }
    }
}

更新:我想提一下,即使这“解决了”我的问题,但这个问题甚至是一个问题也是一个问题。我的设计很糟糕,我正在重新设计基本导航。我将使用基于页面的方法,而不是这种分层设计。

一般原则上,如果我需要破解使其成功,我通常会以不同的方式做得更好。