В связанном с CoreBluetooth
приложении для iOS, написанном в Swift (4.2), у меня возникает следующая проблема:
Приложение обрабатывает определенное количество Peripherals
и Centrals
.Каждый Peripheral
предоставляет услугу и имеет несколько Centrals
подключенных к ней;он ведет учет этого и знает, сколько центральных станций подключено.
Таким же образом каждый Central
связан с несколькими Peripherals
;а также ведет учет этого, чтобы знать, сколько Peripherals
подключено.
У меня есть вопрос о ведении бухгалтерского учета для ведения учета, о которой я только что упомянул, до даты.
Со стороны Peripheral
это работает, и я вижу, когда Central
отключился.Для этого я использую: Периферийный менеджер (_: центральный: didSubscribeTo:) и: Периферийный менеджер (_: центральный: didUnsubscribeFrom:)
Из Central
Я хочуиспользовать: centralManager (_: didConnect:) и: centralManager (_: didDisconnectPeripheral: error:)
Но здесь по какой-то причине это не работает,Первая функция ( centralManager (_: didConnect:) ) вызывается, как и ожидалось, но не вторая ( centralManager (_: didDisconnectPeripheral: error:) ).
Я полагаю, что мне нужно решить этот последний вопрос о том, что функция не вызывается.Но я могу ошибаться.
В результате я вижу, когда приходит Peripheral
, а не когда он уходит.
Чего мне не хватает?Или я просто делаю это неправильно?
Я тестирую приложение на двух устройствах.
--- Дополнительная информация --- (Обновление после публикации)
Вот некоторые изсоответствующий код:
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber) {
print(#function)
if cbPerifList == nil {cbPerifList = [CBPeripheral]()}
if let perifIndx = cbPerifList!.index(where:{$0.identifier==peripheral.identifier}) {
central.connect(cbPerifList[perifIndx], options: nil)
} else {
peripheral.delegate = self
cbPerifList.append(peripheral)
central.connect(peripheral, options: nil)
}
}
Еще одна, возможно, важная вещь, которую я заметил, заключается в следующем.Вместо того, чтобы переключать периферийное устройство с помощью кнопочного переключателя, как я обычно делаю, я принудительно завершаю приложение на устройстве, которое в данный момент играет роль периферийного устройства, затем вызывается функция centralManager (_: didDisconnectPeripheral: error:) на другом устройстве, как я и ожидал;и учет ведется правильно.