Segue准备与执行传值异常:ViewController间变量传递问题
解决First_VC向Second_VC传值后标签不更新的问题
问题原因
你的代码中Second_VC的viewDidLoad方法先于First_VC的prepare方法完成对name的赋值执行,导致初始化时proName被设置为默认值"1";后续name被正确赋值,但没有触发UI更新,所以标签始终显示"1"。
解决方案
给Second_VC的name变量添加属性观察者,当name的值发生变化时自动更新标签文本:
class Second_VC: UIViewController { // 确保proName已正确关联Storyboard中的Label @IBOutlet weak var proName: UILabel! var name: String? { didSet { // UI操作必须在主线程执行,这里强制切换主线程避免异常 DispatchQueue.main.async { self.proName.text = self.name ?? "1" } } } override func viewDidLoad() { super.viewDidLoad() // 初始化时先设置一次,覆盖name提前赋值的场景 proName.text = name ?? "1" print(name ?? "1") } }
额外排查点
- 检查
proName的IBOutlet连线是否正常(右键控件查看连线,无断点则说明连接有效)。 - 核对
prepare方法中的segue.identifier与Storyboard内设置的Segue标识完全一致,避免因标识不匹配导致赋值逻辑未执行。
内容的提问来源于stack exchange,提问作者Resurrect1on-
相关产品推荐
相关产品推荐

