Проблема
Я интегрирую 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
Программируем под IOS
1741541663
Anonymous
Проблема
Я интегрирую 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, чтобы предотвратить аварий, причем призыв к аварийным применению, чтобы не было выполнить призыв к аварию. Есть ли способ реализовать тайм -аут или резервное решение, чтобы справиться с этим изящно?
Подробнее здесь: [url]https://stackoverflow.com/questions/79496234/app-crashes-when-ble-sdk-callback-is-not-executed-with-missing-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия