xcode - NSInteger 0+0=4300282608
问题描述
我正在开发一个简单的计算器应用程序来了解 OSX 开发的工作原理(这不是家庭作业)。当addAction(_ sender: NSButton)
被触发时,它将currentCount
andamountToAdd
一起添加,然后更新currentCount
and 将其设置为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)"
}
}
上传图像后,当前计数最终成为每次运行的随机数......
解决方案
我建议您在其中添加一个断点addAction
并确认这两个值中的哪一个不正确。根据您与我们分享的内容,可能currentCount
不是您认为的那样。
我在这里可以看到的唯一次要逻辑断开是 on 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”,现在每次该值更改时它都会停止。
推荐阅读
- powershell - 展平文件夹结构并创建索引
- c# - 加密和解密音频剪辑到文件统一
- dependency-injection - TabBarController 路由
- curl - 在 AppleScript 中使用 curl 接收错误的字符集以将其移交给 macOS 上的 Outlook
- c# - 我有这段代码可以找到范围内的素数,请任何人告诉我为什么在嵌套循环中使用 i=2 ?
- azure-devops - 如何切换到同一代理上的不同用户以在 AzureDevOps 管道中运行特定任务
- php - Laravel 7 - 不能使用中间件伪造第 3 方 Http 调用
- php - 如何在php中触发下载失败错误
- wordpress - Woocommerce: Different order_id for same products in cart
- micronaut - Micronaut @KafkaListener 出错时丢弃轮询循环中的剩余消息