Swift 3:无法通过 BLE 连接到外设

2024-06-25

我是 BLE 的新手,目前正在尝试制作一个简单的应用程序来连接到我的自定义 BLE 设备。我能够发现 BLE 设备,但由于某种原因我无法连接到它。 我尝试用“浅蓝色”进行检查,它显示我的设备可连接并且似乎工作正常。但在我的应用程序中,当我发现该设备后,CB 管理器尝试连接到它,但似乎“冻结”了?函数“didConnect Peripheral”永远不会被触发,并且外围设备的状态永远是“connecting”。

我如何识别问题?我可以在连接方法中包含任何选项,或者以某种方式跟踪连接过程吗?

我将不胜感激任何在哪里寻找问题的建议。

使用 XCode 8.2.1,使用 Swift 3。测试手机上安装了 iOS 10.2.1

这是我的代码:

import UIKit
import CoreBluetooth

class InfoPageViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {

var manager:CBCentralManager!
var peripheral:CBPeripheral!

let BEAN_NAME = "MyDevice"

override func viewDidLoad() {
    super.viewDidLoad()

    manager = CBCentralManager(delegate: self, queue: nil)
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

    let device = (advertisementData as NSDictionary)
        .object(forKey: CBAdvertisementDataLocalNameKey)
        as? NSString

    if device?.contains(BEAN_NAME) == true {
        self.manager.stopScan()

        self.peripheral = peripheral
        self.peripheral.delegate = self

        manager.connect(peripheral, options: nil)

        print("discovered \(BEAN_NAME)")

    }
}

func centralManager(
    central: CBCentralManager,
    didConnect peripheral: CBPeripheral) {
    print("connected to \(BEAN_NAME)")

    peripheral.discoverServices(nil)
}

func centralManager(central: CBCentralManager, didConnect peripheral: CBPeripheral) {}
--------------------^

Versus:

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
--------------------^

该方法的签名不正确,您缺少_.

方法签名很重要。 我们可以假设,由于这些委托方法是可选的,因此 Apple 代码在内部会询问自己: 我的代表有方法吗func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)实施的 (respondsToSelector:)?在你的情况下,不是,因为它不一样,然后你的就不会被调用。

您可以从文档中复制/粘贴该内容或将其删除,然后让 XCode 完成自动完成工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 3:无法通过 BLE 连接到外设 的相关文章

  • iOS:无法从 Swift 建立 RabbitMQ 连接

    我正在尝试从 Swift 连接 RabbitMQ 我已关注this https github com rabbitmq rabbitmq objc client 图书馆 创建 Pod 设置并进入工作区 已检查并核实 成功运行 viewDid
  • 我可以在 iPhone 应用程序上使用 Facebook 身份验证服务器端流程并仍然进行客户端交互吗?

    我有一个使用 Facebook 身份验证来登录用户的网站 它使用 oAuth 2 0 服务器端流程进行身份验证 一切正常 我现在正在为同一网站开发一个 iPhone 应用程序 并希望允许用户使用 FB 身份验证通过 iPhone 应用程序登
  • 自定义 URL 方案

    如何处理自定义 URL 方案以允许一个应用程序定向到另一个应用程序 例如instagram user username someusername它通过用户名将用户直接引导至用户个人资料 我需要创建类似的东西 我已经结账了applicatio
  • 尝试从 json 获取数据时对成员 `jsonObject(with:options:)` 的引用不明确

    我是 Swift 新手 在制作其中一个教程 相当旧 时涉及通过返回 JSON 的 php 从服务器获取凭据 但我遇到了错误Ambiguous reference to member jsonObject with options 在 jso
  • 在没有按钮的 SwiftUI 中呈现新视图

    所以我想使用 SwiftUI 呈现一个新视图 而用户不必点击按钮 因为NavigationButton会用那个 这是一个例子 struct ContentView View var model Model var body some Vie
  • MobileSafari 的正确触摸按钮行为

    MobileSafari 通常具有不正确的 HTML 按钮行为 不正确的含义 不像 iOS 原生按钮 正确的按钮行为如下 用户触摸按钮 按钮突出显示 用户将手指拖出按钮 按钮变暗 用户将手指拖回按钮 按钮突出显示 用户将手指拖出按钮并释放
  • 有没有办法检查 iOS 设备是否锁定/解锁?

    我在我的应用程序中使用了 GPS 位置更新 我想检测 iOS 设备是否处于睡眠模式 以便我可以关闭 GPS 位置更新并优化电池使用 我已经在iOS 6中尝试过pausesLocationupdates 但它无法按预期工作 我想在设备进入睡眠
  • WGS84 iOS 上外部 GPS 数据的大地水准面高度高度偏移

    对于我正在编写的应用程序 我们将 IOS 设备与外部传感器连接起来 该传感器通过本地 WiFi 网络输出 GPS 数据 该数据以相对于海拔高度的 原始 格式出现 一般来说 所有 GPS 高度都需要应用与基于当前位置的 WGS84 大地水准面
  • 致命错误:在解包可选值时意外发现 nil (lldb)

    override func prepareForSegue segue UIStoryboardSegue sender AnyObject if segue identifier showLocalMenuDetail if let in
  • ios - 安排无限数量的本地通知

    我有一个应用程序 允许用户创建重复事件 每一个事件在一天中的特定时间可能有也可能没有提醒 警报 如果有的话 应用程序会发送一个本地通知在一天中的那个时候 事件存储在CoreData Event name Go to London date
  • 带参数标签的 Swift 下标

    是否可以创建一个可以使用显式参数标签调用的下标 struct MyType subscript label Bool gt String return nil let test MyType let value1 test true ok
  • TDD VS BDD:REST 服务

    我对 TDD 与 BDD 很困惑 TDD 和 BDD 在以下各点上有何不同 开发 先测试用例 再开发 RestService HTTP 不进行休息调用 如果是这样 a 我们是否使用模拟对象仅返回硬编码的 json b 如何处理 REST 调
  • Swift - 使用 NSUserDefaults 保存高分

    我正在使用 Swift 制作游戏 我想使用 NSUserDefaults 保存用户的高分 我知道如何在 AppDelegate 文件中创建新的 NSUserDefaults 变量 let highscore NSUserDefaults N
  • 设置视图控制器根视图的外观代理

    使用 UIAppearance 时是否可以仅针对视图控制器的根视图 我想从我的应用程序委托中为所有控制器设置背景颜色 但只想定位视图控制器上的直接视图 谢谢 详细来说 每个 UIViewController 子类都有自己的 UIView 对
  • 在 swift 中实现自定义markerInfoWindow不起作用

    我一直在使用下面发布的方法来显示自定义信息窗口 但是每当我运行它时 只显示默认窗口 带有标题 片段 我已经为以下方法创建了 xib 和 swift 文件 并且我尝试使用标准函数表示法 即 mapView mapView markerInfo
  • 使用文本编辑器避免在 SwiftUI 中使用键盘

    我正在尝试重新创建 iOS 笔记应用程序的简单版本 请注意 我是一个十足的 Swift 新手 我当前的问题是我希望我的视图在键盘出现时向上移动 我已经实现了一些代码does这样做 但它有一些讨厌的错误 它首先将视图移动得太高 然后当您开始打
  • 如何组合两个可变数组?

    我有一个 iPhone 应用程序 我试图在其中添加两个可变数组 NSMutableArray dataArray NSMutableArray alloc init NSMutableArray dataArray1 NSMutableAr
  • Xcode 版本编辑器 - 如何浏览更改?

    在 Xcode 4 和 5 的内置版本编辑器视图中 当它显示两个修订版之间的差异时 如何从一个更改跳转到另一个更改 我正在寻找类似 Araxis Merge 的 Cmd Down Cmd Up 快捷键的东西 如果您已经在版本编辑器中 在左侧
  • 以编程方式使后退按钮转到上一个视图

    我有一个 UIBarButtonItem 并且想以编程方式设置转到前一个控制器的操作 在我的例子中 我之前的视图是 UITableViewController 下面是我当前用来制作栏按钮项目的代码 尽管该按钮尚未转到上一个视图 UIBarB
  • UIScrollView 在缩放或滚动时阻止所有触摸

    当 UIScrollView 通过捏合手势或滚动进行缩放时 我无法按同一窗口中的任何其他按钮 有什么办法可以启用这种行为吗 这就像滚动视图具有独占触摸 尽管我尝试将其明确设置为NO 我在视图中有一个滚动视图 我希望它仅在用户按住滚动按钮时滚

随机推荐

  • UIView.frame 的核心动画

    我正在尝试制作一个移动两个视图的框架的简单动画 基本上隐藏广告直到加载 然后将框架从底部向上移动 以及从底部开始的视图 然后当广告将其向上推时也会向上移动 开始和结束位置是正确的 但我没有看到它是动画的 它是否正确 谢谢 CAKeyfram
  • LayerDrawable.setLayerInset() 不适用于 android 2.3

    以下示例适用于 android 4 1 但适用于 android 2 3 左右插图未更改 这种行为的原因是什么 public class MyFragment extends Fragment Override public View on
  • 将 PrimeNG 与 Bootstrap 4 结合使用

    目前 我正在为一个新的 Angular 2 项目使用 UI 库 我尝试了 Ng Bootstrap 和 Material 不幸的是它们仍处于 Alpha 和 Beta 阶段 我还检查了 PrimeNG 目前 PrimeNG 提供的组件比 M
  • 比较 2 次提交

    我没有找到任何关于获取两个文件之间差异的文档 我使用下面的代码使用坚固的方式提交文件 repo Rugged Repository new reponame email protected cdn cgi l email protectio
  • 如何以编程方式检查类型是结构还是类?

    如何以编程方式检查类型是结构还是类 Use Type IsValueType http msdn microsoft com en us library system type isvaluetype aspx 获取一个值 该值指示 Typ
  • 代码高尔夫:莫里斯数列

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 挑战 按字符数计算的最短代码将输出莫里斯数列 http en wikipedia org wi
  • 如何禁用和隐藏反应表的分页页脚?

    我是反应表的新手 目前 我有一个 5 行表要在反应表上渲染 并且不需要分页功能 我了解关闭分页 可以通过以下方式完成 pagination false 但是分页控件仍然显示 有办法隐藏它吗 我刚刚找到道具showPagination fal
  • Facebook 错误代码列表?

    在哪里可以找到 Facebook 错误代码的完整列表 在我的应用程序统计信息中 有一些 1340004 错误 Method dialog oauth touch Error Code 1340004 Failures 436 Sampled
  • 使用标准用户帐户在提升的脚本中获取登录用户名

    在 Windows 7 中运行的批处理脚本中 我有几个 IF 子句 例如 IF USERNAME foo GOTO bar 不幸的是 当我运行这个批处理脚本时 用 以管理员身份运行 从上下文菜单中 USERNAME 始终是管理员的用户名 而
  • 简单 C 字符串函数上的 Valgrind 错误

    让我们考虑这个简单的测试程序 include
  • Spring WebFlux - bodyType=org.springframework.web.multipart.MultipartFile 不支持内容类型“application/xml”

    我在用spring webflux并想要上传文件 一切都很好 只需spring web但当谈到webflux我不知道出了什么问题 小心区别 我正在使用
  • iOS 6 仅支持一个视图的不同方向

    我只想将应用程序中的一个视图旋转到左横向或右横向 我的所有其他视图均处于纵向模式 并且我已将我的应用程序设置为仅支持纵向模式 随着 iOS 6 中方向的改变 我不知道如何做到这一点 我已经尝试过下面发布的内容 谁能告诉我我做错了什么 谢谢
  • 流口水规则实施

    我有一个规则 我不知道是否可以在流口水中实施 说明 A L P是所有相关的事实 POJO 我需要找出是否每个A可以分配给一个空闲的P通过L 如果没有 有多少A元素未分配 在上面的一个案例中A将保持未分配状态 我想出了一个很容易描述的算法 F
  • 如何消除 Rust 中单个语句的警告?

    假设有一个警告 例如path statements unused variables 有没有办法忽略其中的一个瞬间 而不将它们隔离到代码块或函数中 需要明确的是 当代码中有一个警告时 我希望能够仅消除该警告 而不必针对特定警告进行特殊更改
  • R data.table roll="nearest" 实际上并不是最近的

    鉴于以下 data tables 我很惊讶地看到 5 9 索引与 5 而不是 6 匹配 我不太明白发生了什么事 dat lt data table index c 4 3 5 9 1 2 datval runif 3 10 datstuff
  • 如何将python输出发送到电报频道而不是组和gmail电子邮件组

    你好 我有一个 python 程序 每隔一小时生成一次结果 结果可以是任何结果 该程序将在本地计算机或虚拟专用网络中运行 我有两个要求 1 自动将此Python生成的结果发送到一个电报组 组名称 ourworld 由我创建 无需用户干预 我
  • WeekFields 在 JVM 8 和 JVM 10 上的不同行为

    我这里有非常简单的程序 public static void main String args LocalDate year LocalDate ofYearDay 2022 100 System out println year Syst
  • 路径表达式无效。需要 StateFieldPathExpression 或 SingleValuedAssociationField

    我有以下查询 query em gt createQueryBuilder gt select s COUNT pictures AS HIDDEN items gt from MainBundle InstagramShop s gt i
  • 如何使用 python argparse 将 add_argument_group 添加到 add_mutually_exclusive_group

    我正在尝试执行以下操作 prog py h usage prog py h s m y year 1 3 month year 然而 无论我如何使用 add argument group 和 add mutually exclusive g
  • Swift 3:无法通过 BLE 连接到外设

    我是 BLE 的新手 目前正在尝试制作一个简单的应用程序来连接到我的自定义 BLE 设备 我能够发现 BLE 设备 但由于某种原因我无法连接到它 我尝试用 浅蓝色 进行检查 它显示我的设备可连接并且似乎工作正常 但在我的应用程序中 当我发现