UITextField、TableView不显示及设置delegate后App崩溃问题咨询
问题修复方案
核心原因
addCardViewController 控件不显示、设置delegate崩溃
你当前跳转addCardViewController时直接调用了无参数初始化方法addCardViewController(),该控制器的UI控件是通过Storyboard/Xib绑定IBOutlet生成的,直接无参数初始化不会加载关联的视图文件,所有IBOutlet属性默认是nil,此时访问控件属性、设置代理都会触发崩溃,同时控件也不会正常渲染。
WalletViewController TableView异常
你定义了table属性,但没有将其添加到当前视图层级,也没有完成基础配置、代理赋值,无法正常使用。
具体修复步骤
修复addCardViewController相关问题
- 确认你的
addCardViewController关联的是Storyboard还是Xib文件,对应修改跳转初始化逻辑:- 若使用Storyboard:先给控制器在Storyboard面板设置
Storyboard ID为AddCardVC,跳转代码替换为:
let storyboard = UIStoryboard(name: "Main", bundle: nil) // 替换为你实际的Storyboard文件名 guard let rootVC = storyboard.instantiateViewController(withIdentifier: "AddCardVC") as? addCardViewController else { return }- 若使用Xib:跳转初始化代码替换为:
let rootVC = addCardViewController(nibName: "你的Xib文件名", bundle: nil) // 替换为你实际的Xib文件名 - 若使用Storyboard:先给控制器在Storyboard面板设置
- 初始化逻辑修改完成后,在
addCardViewController的viewDidLoad方法中添加代理赋值代码即可正常运行:
cardHolder.delegate = self cardNumber.delegate = self expiryDate.delegate = self cvv.delegate = self
修复WalletViewController TableView相关问题
在WalletViewController的viewDidLoad方法中添加TableView基础配置代码:
// 添加到视图层级 view.addSubview(table) // 设置布局(可自行调整尺寸位置) table.frame = CGRect(x: 0, y: view.safeAreaInsets.top, width: view.bounds.width, height: 700) // 注册cell table.register(UITableViewCell.self, forCellReuseIdentifier: "cell") // 赋值代理和数据源 table.delegate = self table.dataSource = self
- 额外优化:你重复设置了两次
view.backgroundColor,可删除冗余的那行代码。
其他说明
Xcode提示无法识别xxx.delegate = self的问题,会在你完成上述初始化、代理协议遵守配置后自动消失,你当前的扩展中已经正确声明了对应代理的遵守,不需要额外修改代理方法代码。
内容的提问来源于stack exchange,提问作者Charles Morgan
相关产品推荐
相关产品推荐

