Segue跳转崩溃:NSUnknownKeyException异常(找不到fatB)求助
解决「NSUnknownKeyException:类不兼容键fatB的键值编码」问题
嘿,这个报错我太熟悉了!本质就是你的Storyboard(或XIB)和Swift代码之间的连接出了问题,再加上你代码里还有个致命的语法错误,咱们一步步来搞定:
第一步:先修复代码里的严重错误
先看你的ViewController2代码——你居然把iOS生命周期方法viewDidAppear嵌套在了自定义的forbutton函数里!这完全不符合Swift的语法规范,会导致系统无法正确识别类的方法,进而触发键值编码的异常。我帮你修正了代码:
import UIKit import AVKit import AVFoundation class ViewController2: UIViewController { // 把生命周期方法放到类的顶层,这才是正确的写法 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 如果需要页面出现时自动播放视频,可以在这里调用playVideo,否则留空就行 } private func playVideo(name : String, type : String) { guard let path = Bundle.main.path(forResource: name, ofType: type) else { debugPrint("视频文件没找到:\(name).\(type)") return } let player = AVPlayer(url: URL(fileURLWithPath: path)) let playerController = AVPlayerViewController() playerController.player = player present(playerController, animated: true) { player.play() } } @IBAction func fatB(_ sender: Any) { // 直接调用播放方法就行,不需要中间的forbutton函数 playVideo(name: "fatB", type: "mp4") } @IBAction func coderB(_ sender: Any) { playVideo(name: "birdC", type: "mp4") } @IBAction func clashB(_ sender: Any) { playVideo(name: "clash", type: "mp4") } }
第二步:检查Storyboard的连接
代码修好后,还得确保界面和代码的连线是对的:
- 打开你的Storyboard,找到
ViewController2对应的页面 - 选中那个叫
fatB的按钮,打开右侧的Connections Inspector(就是右上角那个箭头图标) - 看看
Touch Up Inside的连线有没有红色感叹号,或者是不是连到了一个不存在的方法上——如果有,删掉这个无效连接,重新从按钮拖拽到代码里的fatB(_:)方法上 - 顺便确认一下
ViewController2的File's Owner是不是正确设置成了ViewController2类,别选错了别的类
最后再检查个小细节
确保你的视频文件fatB.mp4、birdC.mp4、clash.mp4真的加到项目里了,而且在Build Phases -> Copy Bundle Resources列表里能找到它们,不然播放的时候会报“video not found”的错误哦。
内容的提问来源于stack exchange,提问作者user8261743
相关产品推荐
相关产品推荐

