NS整数 0+0=4300282608

NSInteger 0+0=4300282608

我正在开发一个简单的计算器应用程序以了解 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)"
    }
}

上传图像后,当前计数最终成为每个 运行...

的随机数

我建议你在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”,现在每次该值更改时它都会停止。