С момента обновления до iOS 8.2 у меня, похоже, возникают проблемы с CoreBluetooth. У меня было предыдущее приложение, работающее с подклассом CBCentralManager для сканирования требуемых UUID. Теперь я не могу получить обратный вызов делегата до didDiscoverPeripherals
.iOS 8.2 CoreBluetooth - CentralManager, не вызывающий делегат didDiscoverPeripherals
Я проверил, что периферийные устройства правильно передают через LightBlue. Я проверил, что состояние CentralManager включено до вызова сканирования. Я попробовал сканирование как с моим UUID, так и с нолем. Опять же, я работал над этим кодом несколько недель до обновления. Кто-нибудь еще испытывал это или имел какое-то представление о том, что может происходить?
EDIT - добавлен код CBCentralManager код подкласса
@implementation CentralManager
-(id) initWithDelegate:(id<CBCentralManagerDelegate>)delegate queue:(dispatch_queue_t)queue {
self = [super initWithDelegate:delegate
queue:queue
options:nil];
_items = [NSMutableDictionary new];
_discoveredPeripherals = [NSMutableArray new];
_app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}
-(void) startScan {
if (!_isScanning && self.state == CBCentralManagerStatePoweredOn && _app.loggedIn) {
[self scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:APP_SERVICE_UUID]] options:nil];
_isScanning = YES;
NSLog(@"Scanning started");
}
}
-(void) stopScan {
[super stopScan];
_isScanning = NO;
NSLog(@"Scanning stopped");
}
В AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (!_centralManager) {
_centralQueue = dispatch_queue_create("centralQueue", nil);
_centralManager = [[CentralManager alloc]initWithDelegate:self queue:_centralQueue];
}
[_peripheralManager beginAdvertising];
[_centralManager startScan];
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
if (central.state == CBCentralManagerStatePoweredOn) {
[_centralManager startScan];
}
}
startScan
вызывается дважды в зависимости от того, если пользователь вошел в систему или centralManager
работает на первом. Я в основном отношусь к peripheralManager
тождественно и что работает (проверено Светло-голубым).
Вы сохраняете ссылку на свой 'CBCentralManager' в свойстве? Можете ли вы показать код, в котором вы настраиваете центральное устройство и сканируете периферийные устройства? – Paulw11
Я добавил некоторый соответствующий код выше. Да, я сохраняю свой подкласс класса CBCentralManager' в свойстве «AppDelegate». –
Вы пытались выключить и снова включить устройство? У меня возникли проблемы, когда Bluetooth не работает без видимых причин и выключается & снова исправляет его. – Paulw11