You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15 RC环境下点击键盘时应用发生崩溃是什么原因?

问题根因

你代码中的UITextField被定义为计算属性,每次访问textField变量都会创建一个全新的UITextField实例:

  • 调用self.view.addSubview(textField)时创建了实例A并添加到视图上
  • 后续添加约束时每次访问self.textField都会生成新的实例,这些实例未被添加到视图上,约束也没有生效到实际可见的实例A
    iOS 15调整了UITextField的键盘输入响应逻辑,系统处理按键输入时会查找对应文本框的属性,拿到类型错误的对象后触发了stringByTrimmingCharactersInSet方法找不到的崩溃,iOS 14没有该层系统调用所以运行正常。

修复方案

将textField从计算属性改为存储属性,确保全局只初始化一次即可,修改后的视图控制器代码如下:

import UIKit

class TestViewController: UIViewController {
    // 改为闭包初始化的存储属性,仅生成一次实例
    private let textField: UITextField = {
        var v = UITextField()
        v.translatesAutoresizingMaskIntoConstraints = false
        return v
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setup()
    }
    
    private func setup() {
        self.view.addSubview(textField)
        
        NSLayoutConstraint.activate([
            self.textField.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
            self.textField.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
            self.textField.heightAnchor.constraint(equalToConstant: 50),
            self.textField.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.8)
        ])
    }
}

如果修改后仍有崩溃,可逐一排查引入的第三方依赖库是否有全局HookUITextField输入相关方法的逻辑,部分旧版本依赖库未适配iOS 15会触发该类系统层面的异常。


内容的提问来源于stack exchange,提问作者AnaMM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:24:03