Когда вы вызываете writeValue (), вы можете указать, хотите ли вы получить ответ от удаленного устройства или нет. В вашем случае вы указали CBCharacteristicWriteType.withResponse, который сообщает удаленному устройству, что ему необходимо отправить ответ, и указывает, была ли запись успешной или нет. Когда удаленное устройство отправляет ответное сообщение, это вызовет функцию didWriteValueFor (). Если ваше устройство НЕ отправляет ответ, то didWriteValueFor () не вызывается. Вы можете прочитать об этом в документации Apple здесь . Вам потребуется запустить захват сниффера Bluetooth, чтобы подтвердить это, но я подозреваю, что ваше устройство Bluetooth не отвечает должным образом на запрос writeValue ().
Обратите внимание, что каждая характеристика BLE имеет набор свойств, которые определяют ее поведение. Некоторые из этих свойств включают в себя: назад, написать, написать без ответа, уведомить, сообщить. Проверьте свойства используемого вами признака и убедитесь, что он поддерживает свойство write. Если ваш признак поддерживает «запись без ответа», но не поддерживает «запись», то ваше устройство не будет отправлять необходимое сообщение обратно в ваше приложение, и поэтому didWriteValuefor () не будет вызываться. Обычно вы можете найти это в документации или использовать приложение Bluetooth, такое как «LightBlue Explorer», чтобы просмотреть эту информацию для вашего устройства.