При работе с CoreBluetooth
, читая значение признака, я обнаружил ошибку в периферийном устройстве (_: didUpdateValueFor: error:) функция протокола CBPeripheralDelegate
.
Я продолжаю получать это сообщение в консоли отладки:
Error in peripheral(_:didUpdateValueFor:error:) :
Error Domain=CBATTErrorDomain Code=6 "The request is not supported."
UserInfo={NSLocalizedDescription=The request is not supported.}
Все, что я пытался на этом этапе решить проблему, не удалось.
Кто-нибудь имел такой опыт и нашел решение?
Вот некоторый соответствующий код:
// CBPeripheralDelegate protocol implementation.
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
print(#function)
if error != nil {
print("Error in \(#function) :\n\(error!)")
return
}
for service in peripheral.services ?? [] {
print("Discovered service \(service)")
if service.uuid == service_UUID {
peripheral.discoverCharacteristics(nil, for: service)
//peripheral.discoverCharacteristics([svcCharac_UUID], for: service) (Same problem!)
}
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor
service: CBService, error: Error?) {
print(#function)
if error != nil {
print("Error in \(#function) :\n\(error!)")
return
}
for characteristic in service.characteristics ?? [] {
print("Discovered characteristic \(characteristic)")
if characteristic.uuid == svcCharac_UUID {
peripheral.setNotifyValue(true, for: characteristic)
peripheral.readValue(for: characteristic)
}
}
}
func peripheral(_ peripheral: CBPeripheral,
didUpdateValueFor characteristic: CBCharacteristic,
error: Error?) {
print(#function)
if error != nil {
print("Error in \(#function) :\n\(error!)")
return
}
.................
}
Вот фрагмент кода в периферийном приложении, где создается характеристика:
//Class level declarations:
var cbPerifMngr:CBPeripheralManager!, mutaSRVC:CBMutableService!,
svcCharac:CBMutableCharacteristic!
.........
// CBPeripheralManagerDelegate protocol implementation.
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
print(#function)
if peripheral.state == .poweredOn {
mutaSRVC = CBMutableService(type: service_UUID, primary: true)
svcCharac = CBMutableCharacteristic(type: svcCharac_UUID,
properties: [.read, .notify],
value: Data(base64Encoded: "Hello!"),//nil,//
permissions: .readable)
mutaSRVC.characteristics = [svcCharac]
cbPerifMngr?.add(mutaSRVC)
cbPerifMngr?.publishL2CAPChannel(withEncryption: false)
}
}