尝试出现<jssalertview.jssalertview ...这是=“”已经=“”呈现=“”

时间:2017-01-10 05:52:13

标签: ios mobile uiviewcontroller swift3 cocoapods

=“”

我&#39; m致力于简单的倒计时器(Swift)。当时间到达&#34; 0&#34;时,我想显示alertView。为此,我使用JSSAlertView pod。

一切运作良好,但有了这个alertView我也得到了这个:警告:尝试呈现已经呈现的

我该如何解决?

我没有使用Storyboard或Xib文件。一切都是以编程方式编写的 我尝试使用Google找到了不同的解决方案 - 没有任何方法可以帮助我。

P.S。 我在下面附上了我的代码。我有两个ViewControllers:

第一个viewController有开始按钮:

class FirstViewController: UIViewController {

func startButtonCLicked(_ button: UIButton) {
        let controller = SecondViewController()
        present(controller, animated: true)
  }
}

第二个viewController有timer功能和alertView:

class SecondViewController: UIViewController {

 func updateTimer() {
        if seconds > 0 {
            print(seconds)
            seconds -= 1

            timerLabel.text = String(Timer.timeFormatted(seconds))

        } else {
            let alertview = JSSAlertView().show(self,
                                                title: "Hey",
                                                text: "Hey",
                                                buttonText: "Hey",
                                                color: UIColorFromHex(appColor.hexMainOrangeColor, alpha: 1))

            alertview.setTextTheme(.light)
        }
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        if timer.isValid == false {
            timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(SecondViewController.updateTimer) , userInfo: nil, repeats: true)
        }
      } 
    }

干杯!

1 个答案:

答案 0 :(得分:0)

解决。

我收到了这个错误,因为只要&#34;秒== 0&#34;我开始经常叫alertView:

func updateTimer() {
        if seconds > 0 {
            print(seconds)
            seconds -= 1
            timerLabel.text = String(Timer.timeFormatted(seconds))
        } else {
            let alertview = JSSAlertView().show(self,
                                                title: "Hey",
                                                text: "Hey",
                                                buttonText: "Hey",
                                                color: UIColorFromHex(appColor.hexMainOrangeColor, alpha: 1))
            alertview.setTextTheme(.light)
        }
    }

要修复它,我创建了全局Bool - secondsLeft并将其指定为false。我把这个Bool放在我的代码里面这样:

func updateTimer() {
        if seconds > 0 {
            print(seconds)
            seconds -= 1

            timerLabel.text = String(Timer.timeFormatted(seconds))

        } else if seconds == 0 && !secondsLeft {

            secondsLeft = true
            let alertview = JSSAlertView().show(self,
                                                title: "Hey",
                                                text: "Hey",
                                                buttonText: "Hey",
                                                color: UIColorFromHex(appColor.hexMainOrangeColor, alpha: 1))

            alertview.setTextTheme(.light)
            alertView.addAction(
            self.dismiss(self, animated: true, completion: nil))
        }
    }

现在,在调用alertView之前,我要检查秒== 0和secondsLeft == false。如果是,则alertView显示,secondsLeft变为 - true,并且我不再调用alertView。 在viewDidAppear里面我再次将secondsLeft指定为false。

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        secondsLeft = false

        if timer.isValid == false {
            timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(SecondViewController.updateTimer) , userInfo: nil, repeats: true)
        }
      } 
    }

所以,它有效......但现在我又得到了另一个Warning: Attempt to present <JSSAlertView.JSSAlertView: 0x7feb1c830a00> on <MyApp.TimerViewController: 0x7feb1be05650> whose view is not in the window hierarchy!

有什么想法吗?