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

bar button item(scan)的Sent Action设置异常,蓝牙传感器扫描列表失效求助

我来帮你理清楚这个问题~ 核心原因很明确:你的非工作版本把scan按钮的触发逻辑只绑定了unwind segue,而没有关联到实际执行蓝牙扫描的scan方法。Unwind segue的作用只是完成页面跳转,它本身不会帮你执行扫描传感器的代码,这就是为什么你能跳转到table view但看不到设备列表的原因。

下面是具体的修复步骤,一步步来:

第一步:确保扫描逻辑的scan方法存在且正确

先检查包含scan按钮的ViewController里有没有这个方法,应该类似这样(以Swift为例):

@IBAction func scan(_ sender: UIBarButtonItem) {
    // 这里是蓝牙扫描的核心代码,比如初始化CBCentralManager、开始扫描外设等
    centralManager.scanForPeripherals(withServices: nil, options: nil)
}

如果没有的话,直接把正常工作版本里的这个方法复制过来,同时要确保蓝牙相关的配套逻辑(比如CBCentralManager的代理设置、扫描结果回调)都完整迁移过来。

第二步:重新绑定按钮的Sent Action到scan方法

  1. 打开Storyboard,找到那个有问题的scan Bar Button Item
  2. 右键点击按钮,在弹出的菜单里定位到Sent Actions区域
  3. 删掉现有的unwind segue绑定(点击绑定项旁边的叉号)
  4. 点击+号,从下拉列表里选择对应的ViewController,再选中scan:方法
    • 如果列表里没显示这个方法,先检查ViewController的类是否正确关联到Storyboard上,或者scan方法有没有添加@IBAction修饰符

第三步:按需处理页面跳转(如果需要先跳转再扫描)

如果你的需求是点击scan按钮后先跳转到table view,再执行扫描,那不能只依赖unwind segue,而是要在scan方法里手动触发跳转+扫描逻辑:

@IBAction func scan(_ sender: UIBarButtonItem) {
    // 先启动蓝牙扫描
    centralManager.scanForPeripherals(withServices: nil, options: nil)
    // 手动触发跳转到table view的segue(记得替换成你自己的segue标识)
    performSegue(withIdentifier: "ShowSensorListSegue", sender: self)
}

记得在Storyboard里给跳转到table view的segue设置一个唯一的identifier(比如"ShowSensorListSegue"),再替换代码里的对应内容。

额外检查点

  • 确认table view的数据源方法(numberOfRowsInSection、cellForRowAt)正确关联了存储扫描设备的数组,当扫描到新设备时要调用tableView.reloadData()刷新列表
  • 检查Info.plist里是否配置了蓝牙权限:根据iOS版本添加NSBluetoothAlwaysUsageDescription或NSBluetoothPeripheralUsageDescription,否则蓝牙扫描会被系统拦截

这样调整后,点击scan按钮就会同时触发扫描逻辑和页面跳转,和正常工作的版本行为一致啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:04:53