Я на самом деле делаю приложение с использованием Bluetooth Low Energy.iOS - CoreBluetooth didDiscoverPeripheral называется только один раз
Мое приложение имеет 3 представления, каждый из которых отображает некоторые данные BLE.
Когда мой протокол протоколов Bluetooth был в первом представлении, проблем не было. Но я решил сделать класс и поместить в него свой код Bluetooth, поэтому я мог бы сделать глобальный класс для своих 2 других просмотров. Я использовал:
self.bluetoothManager = [BluetoothManager getInstance];
BluetoothManager, являющийся моим глобальным классом.
И вот проблема:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Этот метод разве перекручивание больше, это называется один раз только на старте. Я боюсь, что другие сервисы, такие как DiscoverCharacteristics или Notifications, не будут зацикливаться.
Edit: Это, как я создаю мой класс
+(BluetoothManager *)getInstance {
@synchronized(self)
{
if(instance==nil)
{
instance= [[BluetoothManager alloc] init];
}
}
return instance;
}
- (id) init {
self.CentralManager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_main_queue()];
self.activePeripheral = [CBPeripheral alloc];
self.discoveredPeripherals = [NSMutableArray new];
self.resultValue = [[NSString alloc] init];
return self;
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
if (central.state != CBCentralManagerStatePoweredOn) {
return;
}
if (central.state == CBCentralManagerStatePoweredOn) {
// Scan for devices
[self.CentralManager scanForPeripheralsWithServices:nil options:nil];
NSLog(@"Scanning started");
}
}
Edit 2: До сих пор я не отправлял все методы класса, чтобы получить правильный вопрос, но каждые методы из CBCentralManager
делегата реализован в мой класс ,
До сих пор я думаю, что моя проблема связана с потоками, поскольку единственное отличие в том, что мой класс больше не находится в главной очереди? Я попробовал несколько вещей, но я не уверен в потоках, если у кого-то есть решение или идея решить эту проблему, спасибо заранее.
Возможно, нам нужен код 'BluetoothManager', части создания. – Larme
Спасибо, добавил некоторые сведения о создании. –
Где вы начинаете сканирование периферийных устройств. Что вы имеете в виду, это не «зацикливание»? Вы указали дубликат ключа для scanForPeripheralsWithServices? – Paulw11