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

木琴App首按钮点击崩溃,提示-[Xylophone.ViewController buttonClicked:]未识别选择器

问题分析与解决方案

嘿,这个崩溃问题的原因其实非常明确,咱们一步步拆解来看:

核心问题:方法选择器不匹配

你看到的报错信息:

Thread 1: "-[Xylophone.ViewController buttonClicked:]: unrecognized selector sent to instance 0x7ff83a6074e0"

这句话的意思是:系统试图给你的ViewController实例发送一个名为buttonClicked:的消息,但你的ViewController类里根本没有定义这个方法,所以直接触发了崩溃。

为什么只有第一个按钮出问题?

看你贴的代码,你实际定义的按钮点击响应方法是keyPressed(_:),剩下6个按钮应该是正确绑定了这个方法,所以能正常工作。但第一个按钮在Storyboard/XIB里的事件关联出错了——它被错误绑定到了不存在的buttonClicked:方法上,这才导致点击它时崩溃。

修复步骤

  1. 打开项目里的Storyboard(或XIB文件),找到那个出问题的第一个木琴按钮
  2. 右键点击该按钮,打开右侧面板的「Connections Inspector」(箭头图标)
  3. 在「Sent Events」区域找到buttonClicked:这一条,点击旁边的叉号删除错误关联
  4. 重新绑定事件:把按钮的「Touch Up Inside」事件拖到ViewController代码里的keyPressed(_:)方法上,确保绑定正确

额外小提示

虽然不是这次崩溃的原因,但你代码里的两处强制解包(sender.currentTitle!和url!)存在潜在风险,以后可能会引发其他崩溃,建议改成更安全的可选绑定写法:

@IBAction func keyPressed(_ sender: UIButton) {
    guard let soundName = sender.currentTitle else {
        print("按钮未设置标题")
        return
    }
    playSound(soundName: soundName)
}

func playSound(soundName:String) {
    guard let url = Bundle.main.url(forResource: soundName, withExtension: "wav") else {
        print("找不到指定音效文件")
        return
    }
    do {
        player = try AVAudioPlayer(contentsOf: url)
        player.play()
    } catch {
        print("音效播放失败:\(error.localizedDescription)")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:27:49