首页 > 解决方案 > NSInteger 0+0=4300282608

问题描述

我正在开发一个简单的计算器应用程序来了解 OSX 开发的工作原理(这不是家庭作业)。当addAction(_ sender: NSButton)被触发时,它将currentCountandamountToAdd一起添加,然后更新currentCountand 将其设置为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)"
    }
}

在此处输入图像描述

上传图像后,当前计数最终成为每次运行的随机数......

标签: xcodemacosnsintegerswift5

解决方案


我建议您在其中添加一个断点addAction并确认这两个值中的哪一个不正确。根据您与我们分享的内容,可能currentCount不是您认为的那样。

我在这里可以看到的唯一次要逻辑断开是 on viewDidLoad,您假设amountToAdd并且currentCount两者都是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”,现在每次该值更改时它都会停止。

在此处输入图像描述


推荐阅读