Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 按下按钮时计数器不会减法吗?_Swift_Timer_Nstimer - Fatal编程技术网

Swift 按下按钮时计数器不会减法吗?

Swift 按下按钮时计数器不会减法吗?,swift,timer,nstimer,Swift,Timer,Nstimer,每次调用endSetPressed操作时,我都试图将我的setCount设置为-1 我已经将setCount-=1包含到updateTimer函数中,这样当按下endSetPressed时,它应该从setCount中减去-1,然后启动restCount计时器。然而,在实践中,它似乎并没有显示它在应用程序中执行-1操作,它只是保持固定在起始设置计数值 另一个问题是,当用户设置restStepperValueChanged值时,我希望能够看到restRemainingCountdownLabel的值

每次调用endSetPressed操作时,我都试图将我的setCount设置为-1

我已经将setCount-=1包含到updateTimer函数中,这样当按下endSetPressed时,它应该从setCount中减去-1,然后启动restCount计时器。然而,在实践中,它似乎并没有显示它在应用程序中执行-1操作,它只是保持固定在起始设置计数值

另一个问题是,当用户设置restStepperValueChanged值时,我希望能够看到restRemainingCountdownLabel的值,我认为这是通过“restRemainingCountdownLabel.text=String(restCount)”实现的,但是当im使用“restCount=Int(sender.value)*60”在几分钟内生成一个值时,它在几秒钟而不是几分钟内显示restRemainingCountdownLabel,也感谢您的指导

这是我的密码:

    @IBOutlet weak var restRemainingCountdownLabel: UILabel!
@IBOutlet weak var setsRemainingCountdownLabel: UILabel!
@IBOutlet weak var numberOfSetsLabel: UILabel!
@IBOutlet weak var numberOfRestLabel: UILabel!
@IBOutlet weak var adjustSetsStepper: UIStepper!
@IBOutlet weak var adjustRestStepper: UIStepper!

var restTimer: Timer?
var restCount = 0
var setCount = 0

@IBAction func endSetPressed(_ sender: Any) {
    restTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(RestController.updateTimer), userInfo: nil, repeats: true)
}

@IBAction func setStepperValueChanged(_ sender: UIStepper) {
    numberOfSetsLabel.text = Int(sender.value).description
    setCount = Int(sender.value)
    setsRemainingCountdownLabel.text = String(setCount)
}

@IBAction func restStepperValueChanged(_ sender: UIStepper) {
    numberOfRestLabel.text = Int(sender.value).description
    restCount = Int(sender.value)*60
    restRemainingCountdownLabel.text = String(restCount)
}

@IBAction func resetSetsButton(_ sender: Any) {
   //setCount = Int
}

override func viewDidLoad() {
    super.viewDidLoad()

}

func updateTimer() {
    if (setCount > 0){
        setCount -= 1
    }
    if (restCount > 0){
        let minutes = String(restCount / 60)
        let seconds = String(restCount % 60)
        restRemainingCountdownLabel.text = minutes + ":" + seconds
        restCount -= 1
    }
}

查看您的
updateTimer()
方法,第一行:

if (setCount > 0)
如果
setCount>0
则从
setCount

但是……这里您已经声明了值为0的
setCount

var setCount = 0
因此,您永远不会出现在
if
部分:)

如何调试这个 下次遇到类似问题时,请尝试向代码中添加一些
print()
语句

在您的情况下,您可以这样做:

@IBAction func endSetPressed(_ sender: Any) {
    print("endSetPressed")
    restTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(RestController.updateTimer), userInfo: nil, repeats: true)
}

@IBAction func setStepperValueChanged(_ sender: UIStepper) {
    numberOfSetsLabel.text = Int(sender.value).description
    setCount = Int(sender.value)
    setsRemainingCountdownLabel.text = String(setCount)
}

@IBAction func restStepperValueChanged(_ sender: UIStepper) {
    numberOfRestLabel.text = Int(sender.value).description
    restCount = Int(sender.value)*60
    restRemainingCountdownLabel.text = String(restCount)
}

@IBAction func resetSetsButton(_ sender: Any) {
   //setCount = Int
}

override func viewDidLoad() {
    super.viewDidLoad()
}

func updateTimer() {
    print("updateTimer")
    if (setCount > 0){
        print("setCount > 0")
        setCount -= 1
        print("setCount is now \(setCount)")
    }
    if (restCount > 0){
        print("restCount > 0")
        let minutes = String(restCount / 60)
        let seconds = String(restCount % 60)
        restRemainingCountdownLabel.text = minutes + ":" + seconds
        restCount -= 1
        print("restCount is now \(restCount) - minutes: \(minutes) - seconds: \(seconds)")
    }
}
这将为您提供一些关于正在发生的事情以及代码遵循的“路径”的指示


希望这能对你有所帮助。

调试你的代码,使用断点和检查值,添加
打印(…)
语句。我只做了一个星期的swift,所以我对调试东西还不够了解,所以为什么我在这里寻求帮助,然后习惯调试,这是我能给你的最有价值的建议,我会给你的。一旦开始添加
print
s和断点,这个问题可能很容易解决。谢谢,这很有用,但是如果读数是“updateTimer setCount>0 setCount现在是4”,它怎么可能是4而不是>0?我假设我在前面将setCount设置为=用户定义的数字,因为我首先使用setStepperValueChanged操作将其设置为更高。我成功地使用print语句修复了它,并将set-1向上移动到@IBAction func endSetPressed(u-sender:Any)代码,使其删除1之前,而不是在一个没有意义的计时器的每个滴答声!然后在-1之后将setcount写入标签,我只是盯着它看了太久,我知道那种感觉。有时你会盯着看似简单的东西看太久,以至于失明:)很高兴你把它解决了