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

使用Segue跳转控制器遇NSUnknownKeyException异常求助

排查NSUnknownKeyException导致Segue跳转崩溃的问题

这个NSUnknownKeyException错误在iOS开发里太常见了,结合你说的情况——只打印操作完全正常,一执行performSegue就崩溃,大概率是和Segue跳转过程中的键值编码(KVC)绑定或者目标控制器的配置有关,咱们一步步来排查:

  • 检查Segue标识符的拼写一致性
    你代码里调用的应该是performSegue(withIdentifier: "gosegue", sender: self)吧?先去Storyboard里确认这个Segue的Identifier是不是和代码里的完全一致——iOS对标识符大小写敏感,别出现goSegue、goseguee这种拼写偏差,也别带多余空格。

  • 排查目标控制器的属性与绑定问题
    如果你是在prepare(for segue: UIStoryboardSegue, sender: Any?)方法里用KVC方式传值(比如destinationVC.setValue(value, forKey: "targetProperty")),一定要确认:

    1. 目标控制器里确实存在名为targetProperty的属性,而且是var类型(不能是let);
    2. 如果是Swift代码,这个属性最好加上@objc修饰,因为KVC依赖OC运行时机制;
      另外,也有可能是Storyboard里的IBOutlet绑定失效——比如你已经删掉了目标控制器里某个控件的IBOutlet代码,但Storyboard里还保留着旧的绑定关系,跳转时系统尝试设置不存在的键就会崩溃。可以右键点击目标控制器,看看有没有带红色感叹号的错误绑定,直接删掉即可。
  • 确认prepare(for:)里的类型转换是否正确
    获取目标控制器时,一定要确保类型转换准确,比如:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "gosegue" {
            guard let destinationVC = segue.destination as? YourTargetViewController else {
                print("目标控制器类型转换失败")
                return
            }
            // 这里安全地传值
            destinationVC.yourProperty = yourData
        }
    }
    

    如果类型转换错了(比如转成了别的控制器类),后续给不存在的属性赋值也可能触发这个异常。

  • 检查Storyboard的控制器类绑定
    去Storyboard里找到目标控制器,确认它的Custom Class是不是正确设置成了你编写的控制器类——别选错成其他类,也别出现类名拼写错误(比如你改了类名但没更新Storyboard里的配置)。

最后补充个小技巧:如果能把完整的错误信息贴出来会更高效,因为NSUnknownKeyException的完整报错会明确指出是哪个key找不到,比如reason: '[<YourViewController 0x12345678> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key xxx.',这个xxx就是直接定位问题的关键。

内容的提问来源于stack exchange,提问作者mrs.bassim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:26