NSInteger 0 + 0 = 4300282608

时间:2019-04-10 15:24:28

标签: xcode macos nsinteger swift5

我正在开发一个简单的计算器应用程序,以了解OSX开发的工作原理(这不是家庭作业)。触发addAction(_ sender: NSButton)时,它将currentCountamountToAdd加在一起,然后更新currentCount并将其设置为currentCountLabel

问题:应用程序首次启动时,currentCountamountToAdd设置为0,但加在一起等于4,300,282,608。如果我在进行加法运算之前按下清除按钮,则它等于0,这是正确的。

问题:第一次如何更改代码以进行正确的计算。这似乎是一个强制性问题。

import Cocoa

class ContainerViewController: NSViewController {

    var currentCount: Int = 0
    var amountToAdd: Int = 0

    @IBOutlet weak var currentCountLabel: NSTextField!
    @IBOutlet weak var amountToAddTextField: NSTextField!


    override func viewDidLoad() {
        super.viewDidLoad()
        currentCountLabel.integerValue = 0
        amountToAddTextField.integerValue = 0
    }

    @IBAction func amountTextField(_ sender: NSTextField) {
        amountToAdd = amountToAddTextField.integerValue
    }

    @IBAction func addAction(_ sender: NSButton) {
        currentCount = currentCount + amountToAdd
        currentCountLabel.integerValue = currentCount
    }

    @IBAction func clearAction(_ sender: Any) {
        currentCount = 0
        amountToAdd = 0
        currentCountLabel.integerValue = 0
        amountToAddTextField.integerValue = 0
    }

    func getEntryLog() -> String {
        return "\(currentCount) + \(amountToAdd) = \(currentCount + amountToAdd)"
    }
}

enter image description here

上传图片时,当前计数最终每次运行都是一个随机数...

1 个答案:

答案 0 :(得分:0)

我建议您在addAction中添加一个断点,并确认这两个值中的哪一个不正确。根据您与我们分享的信息,大概currentCount并非您想像的那样。

我在这里看到的唯一次要逻辑断开是,在viewDidLoad上,您假设amountToAddcurrentCount都是0,尽管从技术上讲,任何人都可以提示此视图控制器可能已在实例化视图控制器的时间与加载视图控制器之间重置了其中一个值(可能不正确)。

要解决此逻辑断开连接,可以显式使用那些变量而不是0:

override func viewDidLoad() {
    super.viewDidLoad()
    currentCountLabel.integerValue = currentCount
    amountToAddTextField.integerValue = amountToAdd
}

或者,如果您希望加载视图控制器以重置视图,则同时让viewDidLoadclearAction调用一些通用例程:

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

@IBAction func clearAction(_ sender: Any) {
    resetValues()
}

private func resetValues() {
    currentCount = 0
    amountToAdd = 0

    currentCountLabel.integerValue = 0
    amountToAddTextField.integerValue = 0
}

如果您要使用其他代码来显示此视图控制器,建议您检查一下currentCount可能没有设置的内容(可能不正确)。

或者在viewDidLoad中放置一个断点,然后在一个您认为不应该的值上添加一个监视。例如。我 control 在变量视图中单击currentCount,然后选择“ Watch currentCount”,它每次值更改时都会停止。

enter image description here