iOS开发:标签加减功能仅减法生效,加法失效问题求助
解决标签数值增减的加法功能异常问题
看起来你遇到了个挺诡异的小问题:减法按钮正常工作,加法却没反应,而且把减法函数删掉之后加法又能跑了?我来帮你梳理几个最可能的原因和解决办法,都是我之前踩过的类似坑:
1. 优先检查按钮的IBAction连接
这是最常见的原因!大概率是你的加号按钮没有正确连接到pluspressed函数,甚至可能不小心连到了减法的subpressed上,或者同一个按钮连了多个Action。
怎么排查:
- 打开你的Storyboard/XIB,右键点击加号按钮,在弹出的菜单里看「Sent Events」下的Action是不是指向
pluspressed; - 同时检查减号按钮的连接,确保它只连了
subpressed,没有和加号的函数搞混。
2. 确认ttmar变量的初始化逻辑
你有没有在页面加载时,从UserDefaults里读取ttmar的初始值?如果只在按钮点击时修改内存里的ttmar,但初始时没同步存储的值,可能会导致加法逻辑出现异常(比如内存里的变量是默认值,但存储里是另一个值,两者冲突)。
建议在viewDidLoad里加上初始化代码:
override func viewDidLoad() { super.viewDidLoad() // 从UserDefaults读取存储的数值,默认给0(如果是第一次使用) ttmar = UserDefaults.standard.integer(forKey: "ttmar") // 同步显示到标签上 ttma.text = "\(ttmar)" }
3. 优化UserDefaults的读写逻辑(避免竞态问题)
你现在的写法是直接修改内存里的ttmar再存回去,但如果内存里的变量和UserDefaults里的数值不一致(比如其他地方修改了存储),就会出问题。而且iOS 10之后UserDefaults.synchronize()已经不需要调用了,苹果官方不推荐再用。
修改后的加减函数可以改成这样:
@IBAction func subpressed(_ sender: Any) { let defaults = UserDefaults.standard // 先读取最新的存储值,再修改 var currentValue = defaults.integer(forKey: "ttmar") currentValue -= 1 ttmar = currentValue ttma.text = "\(currentValue)" defaults.set(currentValue, forKey: "ttmar") } @IBAction func pluspressed(_ sender: Any) { let defaults = UserDefaults.standard var currentValue = defaults.integer(forKey: "ttmar") currentValue += 1 ttmar = currentValue ttma.text = "\(currentValue)" defaults.set(currentValue, forKey: "ttmar") }
4. 最后确认ttma的IBOutlet连接
虽然减法能正常显示,但还是可以确认下ttma这个标签的IBOutlet是不是正确连接到了Storyboard里的控件,避免出现加法函数运行时标签为nil的情况(不过这种情况减法也会崩溃,可能性比较低)。
按照上面的步骤排查,应该就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者GamerPlayClips
相关产品推荐
相关产品推荐

