Проблема
Я интегрирую RunMefit SDK в свое приложение RAGE, используя API Expo Modules для связи с устройством BLE. Когда устройство не отправляет никаких данных (например, пустая история упражнений), мое приложение сбоя с потоком 1: exc_bad_access (code = 1, address = 0x0), потому что обратный вызов в методе SDK NotifyRunmefit никогда не выполняется. class = "Lang-Swift PrettyPrint-Override">// Set up the peripheral delegate
public func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print("Connected to \(peripheral.name ?? "unknown device")")
self.peripheral = peripheral
peripheral.delegate = self // Setting the delegate here
peripheral.discoverServices([CBUUID(string: UUID_Service)])
}
// Handling discovered service and characteristics
public func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
guard let services = peripheral.services else { return }
for service in services {
peripheral.discoverCharacteristics([CBUUID(string: UUID_Write_Char), CBUUID(string: UUID_Notify_Char)], for: service)
}
}
public func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
guard let characteristics = service.characteristics else { return }
for characteristic in characteristics {
if characteristic.uuid.uuidString == UUID_Write_Char {
self.writeCharacter = characteristic
} else if characteristic.uuid.uuidString == UUID_Notify_Char {
peripheral.setNotifyValue(true, for: characteristic)
}
}
}
// Problem occurs in this delegate method
public func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
print("Received: \(String(describing: characteristic.value))")
guard let writeCharacter = writeCharacter else {
print("No write characteristic found")
return
}
let nsError = error as NSError? ?? NSError(domain: "", code: 0, userInfo: nil)
STBlueToothData.sharedInstance().notifyRunmefit(
peripheral,
writeCharacter: writeCharacter,
characteristic: characteristic,
error: nsError,
complete: { (error, revType, errorType, responseObject) in
// This code is never executed when no data is available
// Leading to EXC_BAD_ACCESS crash
let nsError = error as NSError
if nsError.code != 0 {
print("Error: \(error)")
} else {
let dict: [String: Any] = [
ST_RevType_Key: NSNumber(value: revType.rawValue),
ST_ErrorType_Key: NSNumber(value: errorType.rawValue)
]
NotificationCenter.default.post(
name: NSNotification.Name(Nof_Revice_Data_Key),
object: responseObject,
userInfo: dict
)
}
}
)
}
< /code>
SDK Метод Определение < /p>
-(void)notifyRunmefit:(CBPeripheral *)peripheral
WriteCharacter:(CBCharacteristic *)writeCharacter
Characteristic:(CBCharacteristic *)characteristic
Error:(NSError *)error
Complete:(void(^)(NSError *error, REV_TYPE revType, ERROR_TYPE errorType, id responseObject))complete;
< /code>
То, что я наблюдал,
Приложение работает нормально, когда устройство отправляет данные
Когда данные не доступны (например, пустая история упражнений), приложение сбоя с потоком 1: Exc_bad_access (Code = 1, Address = 0x0) < /code>
. Отвечает на то, что не может быть выполнено, что это не так, что не может быть выполнено. Этот сценарий
Что я пробовал: < /p>
Добавление нулевых проверок для почти всего < /li>
Попытка заменить вызов SDK на прямую реализацию < /li>
< /ul>
Вопрос:
Как я могу изменить свою реализацию Swift, чтобы предотвратить аварий, причем призыв к аварийным применению, чтобы не было выполнить призыв к аварию. Есть ли способ реализовать тайм -аут или резервное решение, чтобы справиться с этим изящно?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ssing-data
Приложение сбои, когда обратный вызов BLE SDK не выполняется с отсутствующими данными ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Приложение сбои, когда обратный вызов BLE SDK не выполняется с отсутствующими данными
Anonymous » » в форуме IOS - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Swift: BLE Peripheral DidupdateValueForCharacteristic обратный вызов, не называемый в SDK
Anonymous » » в форуме IOS - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Сравнение 2 файлов данных и создайте новый файл с отсутствующими данными с помощью Python
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Сравнение 2 файлов данных и создайте новый файл с отсутствующими данными с помощью Python
Anonymous » » в форуме Python - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-