Приложение сбои, когда обратный вызов BLE SDK не выполняется с отсутствующими даннымиIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Приложение сбои, когда обратный вызов BLE SDK не выполняется с отсутствующими данными

Сообщение 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, чтобы предотвратить аварий, причем призыв к аварийным применению, чтобы не было выполнить призыв к аварию. Есть ли способ реализовать тайм -аут или резервное решение, чтобы справиться с этим изящно?


Подробнее здесь: https://stackoverflow.com/questions/794 ... ssing-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Приложение сбои, когда обратный вызов BLE SDK не выполняется с отсутствующими данными
    Anonymous » » в форуме IOS
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Swift: BLE Peripheral DidupdateValueForCharacteristic обратный вызов, не называемый в SDK
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Объединение двух таблиц с отсутствующими данными
    Anonymous » » в форуме MySql
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Сравнение 2 файлов данных и создайте новый файл с отсутствующими данными с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Сравнение 2 файлов данных и создайте новый файл с отсутствующими данными с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»