【发布时间】:2021-03-17 22:08:12
【问题描述】:
我正在使用 Bluejay 框架编写一个将连接到我的 BLE 设备的应用程序。 我有一项服务可以在固件完成启动时传输数据。
我正在调用这个方法:
func listenLiveSignals()
{
let requestedChar = CharacteristicIdentifier(uuid: NotioModel.signalLiveData, service: ServiceIdentifier(uuid: NotioModel.SignalsService))
bluejay.listen(to: requestedChar, multipleListenOption: .replaceable) {[weak self] (result: ReadResult<NotioSignals>) in
print("Signals update")
switch result {
case .success(let signals):
self?.liveSignals = signals
case .failure(let err):
print("Error: \(err)")
}
}
}
在日志中我得到了这个
Queue will start Bluejay.ListenCharacteristic...
Will start listening to Characteristic: 9AFABEDB-50F5-4766-8EE1-709073D6EB08, Service: 9AFAABCD-50F5-4766-8EE1-709073D6EB08 on NOTIOFE46EEBB.
Listening to Characteristic: 9AFABEDB-50F5-4766-8EE1-709073D6EB08, Service: 9AFAABCD-50F5-4766-8EE1-709073D6EB08 on NOTIOFE46EEBB.
Queue has removed Bluejay.ListenCharacteristic because it has finished.
Queue is empty, nothing to update.
这是我用来连接外围设备的代码。
func connect(_ peripheral: PeripheralIdentifier) {
self.bluejay.connect(peripheral, timeout: .seconds(15)) { connectionResult in
switch connectionResult {
case .success:
print("Connection attempt to: \(peripheral.description) is successful")
case .failure(let error):
print("Error: \(error)")
}
}
}
我的项目还连接到加载了 BlinkyLed 服务的北欧开发板,并且使用相同的代码连接到其上的按钮服务,效果很好,这对我来说有点莫名其妙。
如果有人知道 Bluejay 为什么这样做,我知道,或者如果您需要更多核心,也请告诉我。
【问题讨论】:
-
可能是因为
requestedChar是一个局部变量,函数一退出就会被释放。让它成为一个属性 -
@Paulw11将其设为私有变量,但仍然遇到同样的问题 :(
-
包含此函数的对象是否也以某种方式保留了下来?日志表明正在释放监听特性。
-
是的,声明代码的对象被主视图保留。实例作为环境对象传递给子视图
-
BLE 设备有问题。制造它的工程师告诉我,它在固件方面。 “关闭”这个问题
标签: ios core-bluetooth