【问题标题】:What would cause my segue to infinitely loop?什么会导致我的 segue 无限循环?
【发布时间】:2015-05-14 02:35:43
【问题描述】:

我已经实现了一个倒计时计时器,如果用户没有选择任何选项,它将自动启动我的应用程序。当计时器达到零时,我将其无效并触发performSegueWithIdentifier,这使我进入了我想要的视图。

那时一切都很好……嗯,有点。我确实注意到我的视图触发了两次,但在那之后就很好了。此时,如果我离开该视图,然后再次返回,我的 segue 会触发并且视图会一遍又一遍地加载,直到我停止我的应用程序。

我的输出窗口显示:

2015-05-13 21:20:26.880 Web 应用浏览器[43407:7957566] 不平衡 调用开始/结束外观转换 . 2015-05-13 21:20:28.825 Web 应用浏览器 [43407:7957566] 不平衡调用 的开始/结束外观转换。

这是我的视图控制器:

class StartViewController: UIViewController {

    var countDown = Bool()
    var timer = NSTimer()
    var count = 5
    @IBOutlet weak var countdownLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        countDown = AppDelegate().userDefaults.valueForKey("Auto Start") as! Bool

        if countDown == true {
            var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)

        } else {
            countdownLabel.text = ""
        }      
    }

    func update() {
        countdownLabel.text = "\(count)"

        if count == 0 {
            timer.invalidate()
            self.performSegueWithIdentifier("toWeb", sender: nil)
        } else {
            count--
        }
    }
}

我的故事板:

在下图中,您可以看到我选择的 segue,它将用户从开始屏幕带到具有嵌入式 viewController 的导航控制器。您会注意到我已将标识符添加为“toWeb”。

我的问题:

什么会导致我的 segue 无限循环?

【问题讨论】:

    标签: ios swift segue


    【解决方案1】:

    不确定这是否与您的问题直接相关,但您两次声明计时器,一次在本地,一次在类范围内。

    var countDown = Bool()
    var timer = NSTimer()
    var count = 5
    @IBOutlet weak var countdownLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        countDown = AppDelegate().userDefaults.valueForKey("Auto Start") as! Bool
    
        if countDown == true {
            var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
    
        } else {
            countdownLabel.text = ""
        }      
    }
    

    您会看到 var timer = NSTimer() 在类范围内创建了一个计时器

    var timer = NSTimer.scheduleTimerWithTimeInterval... 在 vi​​ewDidLoad 范围内创建一个新的计时器。我认为应该只是 timer = NSTimer.scheduleTimer...

    【讨论】:

      【解决方案2】:

      我想这很明显,但我的更新每秒都会被调用......因为我告诉它。我把我的performSegueWithIdentifier 放在里面。所以,很容易解决。

      var segueFlag = false
      
      func update() {
              countdownLabel.text = "\(count)"
      
              if count == 0 {   
                  timer.invalidate()
      
                  if segueFlag == false {
                      self.performSegueWithIdentifier("toWeb", sender: nil)
                      segueFlag = true
                  }
      
              } else {
                  count--
              } 
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多