2016-12-12 2 views
0

Je veux utiliser le CBCentralManager afin de trouver les périphériques Bluetooth basse énergie autour de moi. Le gestionnaire central est lancé, il démarre correctement et il scanne. Mais la fonction didDiscover n'est jamais appelée. J'ai lu tous les autres messages à ce problème et similaire et je suis sûr à 99% que mon problème n'a pas la même cause. Pourtant, je ne peux pas trouver ce que j'ai mal fait.didDiscover périphérique non appelé

import Foundation 
import CoreBluetooth 

@objc(SmallerBeaconServiceImpl) 
class SmallerBeaconServiceImpl : NSObject, CBCentralManagerDelegate, CBPeripheralDelegate { 

    private let centralManager : CBCentralManager 

    func centralManagerDidUpdateState(_ central: CBCentralManager) { 
     if central.state == CBManagerState.poweredOn && isRunning { 
      startScanningForPeripherals() 
     } 
     print("updated state: \(central.state)") 
    } 

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { 
     print(peripheral.name ?? "no name") 
    } 

    func startScanningForPeripherals() { 
     if centralManager.state != CBManagerState.poweredOn { 
      return 
     } 

     centralManager.scanForPeripherals(withServices: nil, options: nil) 
     print("is scanning: \(centralManager.isScanning)") 
    } 


    private(set) var isRunning = false 

    func startListening() { 
     if isRunning { 
      return 
     } 

     isRunning = true 

     print("started.") 
     startScanningForPeripherals() 
    } 

    func stopListening() { 
     if !isRunning { 
      return 
     } 
     isRunning = false 

     centralManager.stopScan() 
    } 

    override init() { 
     centralManager = CBCentralManager() 
     super.init() 

     print("initiated") 
    } 
} 
+2

Vous n'avez pas défini le délégué de 'centralManager'. – Larme

+0

@Larme: J'ajouterais certainement cela comme une réponse, donc cela peut être accepté. –

+0

qui a certainement aidé. Je vous remercie! J'aimerais marquer ceci comme la bonne réponse! – user6155118

Répondre

0

optional func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) est un procédé CBCentralManagerDelegate.

Votre classe SmallerBeaconServiceImpl est conforme à CBCentralManagerDelegate, mais vous ne l'avez pas défini votre propriété centralManagerdelegate (CBCentralManagerDelegate). C'est pourquoi centralManager(_central:didDiscover:advertisementData:rssi) n'est pas appelée.

Cela peut être corrigé avec:

centralManager = CBCentralManager(delegate: self, queue: nil)