EXC_BAD_ACCESS KERN_INVALID_ADDRESS сбой при отключении от устройства BLE - PullRequest
0 голосов
/ 10 июня 2019

Я занимаюсь разработкой приложения для iOS, которое устанавливает связь между устройством iOS и транспортным средством через адаптер OBD2. Для этого я использую библиотеку - LTSupportAutomotive . Связь работает хорошо. Проблема возникает, когда адаптер отключен от автомобиля и, следовательно, соединение прерывается. Через некоторое время я получаю крах. У меня есть отчет о сбое Crashlytics, и ошибка: EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x00000008ba9ae0a0. Из того, что я прочитал, это означает, что есть указатель на недействительную память. Я не могу по-настоящему понять, почему это произойдет и как приступить к его решению. Сбой происходит следующим способом из библиотеки:

-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
{
    LOG( @"Did disconnect %@: %@", peripheral, error );
    if ( peripheral == _adapter )
    {
        [_inputStream close];
        [_outputStream close];
    }
}

Есть уведомление, что соединение прервано. Когда я обращаюсь с этим, я устанавливаю переменную, указывающую на объект класса (LTBTLESerialTransporter), который имеет метод выше, на nil. Это должно вызвать его dealloc метод, где метод disconnect должен быть вызван:

-(void)disconnect
{
    [self stopUpdatingSignalStrength];

    [_inputStream close];
    [_outputStream close];

    if ( _adapter )
    {
        [_manager cancelPeripheralConnection:_adapter];
    }

    [_possibleAdapters enumerateObjectsUsingBlock:^(CBPeripheral * _Nonnull peripheral, NSUInteger idx, BOOL * _Nonnull stop) {
        [_manager cancelPeripheralConnection:peripheral];
    }];
}

Отчет о сбое выглядит следующим образом:

Сбой: LTBTLESerialTransporter

0 libobjc.A.dylib 0x1d35a3bf0 objc_retain + 16

1 LTSupportAutomotive 0x100d58040 - [LTBTLEWriteCharacteristicStream close] + 80

2 LTSupportAutomotive 0x100d56c04 - [LTBTLESerialTransporter centralManager: didDisconnectPeripheral: ошибка:] + 264

3 CoreBluetooth 0x1d9e423ec - [CBCentralManager handlePeripheralDisconnectionCompleted:] + 232

4 CoreBluetooth 0x1d9e431e8 - [CBCentralManager handleMsg: args:] + 620

5 CoreBluetooth 0x1d9e51430 __30- [CBXpcConnection _handleMsg:] _ block_invoke + 60

6 libdispatch.dylib 0x1d3df0a38 _dispatch_call_block_and_release + 24

7 libdispatch.dylib 0x1d3df17d4 _dispatch_client_callout + 16

8 libdispatch.dylib 0x1d3d9a320 _dispatch_lane_serial_drain $ VARIANT $ mp + 592

9 libdispatch.dylib 0x1d3d9ae70 _dispatch_lane_invoke $ VARIANT $ mp + 480

10 libdispatch.dylib 0x1d3d9a1ec _dispatch_lane_serial_drain $ VARIANT $ mp + 284

11 libdispatch.dylib 0x1d3d9ae3c _dispatch_lane_invoke $ VARIANT $ mp + 428

12 libdispatch.dylib 0x1d3da34a8 _dispatch_workloop_worker_thread + 596

13 libsystem_pthread.dylib 0x1d3fd1114 _pthread_wqthread + 304

14 libsystem_pthread.dylib 0x1d3fd3cd4 start_wqthread + 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...