2016-06-10 9 views
1

Den Versuch, konsequent in schnellen Arbeits Kern bluetooth Zustand Wiederherstellung zu bekommen, aber ich kann nur scheinen, um es einmal Feuer zu bekommen, und dann tut es nicht mehr reagieren ...Kern bluetooth Zustand Wiederherstellung nur feuert einmal

bisher i habe in meiner Klasse init:

override init() { 
    super.init() 
    let centralQueue = dispatch_queue_create("com.domain.app", DISPATCH_QUEUE_SERIAL) 
    centralManager = CBCentralManager(delegate: self, queue: centralQueue, options: [CBCentralManagerOptionRestoreIdentifierKey: "myCentralManager", CBCentralManagerOptionShowPowerAlertKey: true]) 

} 

und meinen WillRestoreState Delegierten:

func centralManager(central: CBCentralManager, willRestoreState dict: [String : AnyObject]) {  

    let peripheral = dict[CBCentralManagerRestoredStatePeripheralsKey] 

    for peripheral in peripherals as! [CBPeripheral] { 
     showGenericNotification("BLE \(peripheral)") 
     peripheral.delegate = bleService 
    } 
} 

dann, wenn ich Daten von dem BLE-Gerät senden, um die showNotification() legt eine Benachrichtigung in mein Benachrichtigungscenter .. und es wird nur einmal ausgelöst und reagiert dann nicht mehr. bleService ist die Instanz mit CBPeripheralDelegate, die das Peripheriegerät verwaltet

scheint nicht wie der Delegat auf den bleService zuweisen ... jemand irgendwelche Ideen ??

Antwort

0

CBCentralManager hat eine Methode scanForPeripherals(withServices:options:) wo Sie Optionen für das Scannen angeben. Standardmäßig generiert dieser Manager ein Erkennungsereignis für mehrere empfangene Peripheriepakete, wie in docs angegeben. Sie haben true Wert unter den CBCentralManagerScanOptionAllowDuplicatesKey für Optionen Wörterbuch passieren erwartete Wirkung zu erhalten:

Filterung ist deaktiviert und eine Entdeckung Ereignis jedes Mal erzeugt wird, das zentrale ein Werbepaket von den peripheren

erhält dann Die Delegate-Methode für die Statuswiederherstellung wird mehr als einmal aufgerufen, jedoch nur, wenn sie aufgerufen werden muss, dh wenn der Discovery-Ereignisdienst zwischengespeichert wurde.