簡體   English   中英

彈出另一個WatchKit控制器后,立即彈出另一個總是失敗

[英]Pushing A New WatchKit Controller Immediately After Popping Another Always Fails

好。 在經典的iOS中執行此操作很容易,但是WatchKit不會給出任何阻止​​/關閉,並且在有/無動畫之間沒有選擇。

我有一個具有選項列表的根控制器。 觸摸其中一個選項(在手表或手機上)將關閉任何當前打開的控制器( popToRootController ),然后立即按一個新的

或多或少,就像這樣:

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

問題是兩次調用之間沒有足夠的時間,並且沒有lambda可供我執行信號量或推動控制器。

如果我逐步使用調試器,則不會發生任何問題。 如果我只是點擊“運行”,那就沒有用了。 這就是所謂的“ heisenbug”

我想我可以做一個一次性計時器,但這似乎是一個駭人聽聞的技巧,以至於實際上可能導致《原力》的中斷。

還有更好的主意嗎? 我想念什么?

我知道iOS有很多答案。 他們在這里沒有給我帶來很多好處。

好吧,我屈從於《黑暗的一面》,並進行了計時器破解。 有用。 每個打開的控制器我需要給它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)}
        }
    }
}

更新:我確實要提到,即使這“解決”了我的問題,但這個問題甚至是一個問題也是一個問題。 我的設計很糟糕,我正在重新設計基本導航。 我將使用基於頁面的方法,而不是這種分層設計。

一般而言,如果我需要破解才能使其正常工作,通常最好以其他方式進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM