NSInteger 0 + 0 = 4300282608 - PullRequest
       47

NSInteger 0 + 0 = 4300282608

0 голосов
/ 10 апреля 2019

Я занимаюсь разработкой простого приложения для калькулятора, чтобы понять, как работает разработка OSX (это не домашняя работа).Когда addAction(_ sender: NSButton) срабатывает, он добавляет currentCount и amountToAdd вместе, затем обновляет currentCount и устанавливает его на currentCountLabel.

Проблема: Когда приложение впервые запускается currentCount и amountToAdd установлены на 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 голосов
/ 10 апреля 2019

Я бы предложил вам добавить точку останова в addAction и подтвердить, какое из этих двух значений неверно.Исходя из того, что вы поделились с нами, предположительно currentCount - это не то, что вы думаете.

Единственный незначительный логический разрыв, который я вижу здесь, это то, что на viewDidLoad вы предполагаетечто amountToAdd и currentCount оба 0, хотя технически возможно для того, кто бы ни представил, этот контроллер представления мог сбросить одно из этих значений (возможно, неправильно) между временем, когда был создан экземпляр контроллера представления, и когда он был загружен.

Чтобы разрешить это логическое разъединение, вы можете явно использовать эти переменные, а не 0:

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

Или, если вы хотите, чтобы загрузка контроллера представления сбрасывала представление, тогда используйте оба viewDidLoad и clearAction вызывают некоторую обычную процедуру:

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

...