Próbuję odsłuchać wszystkie zdarzenia połączenia/rozłączenia Bluetooth. Mimo że funkcja delegata nazywa się centralManagerDidUpdateState
, nic się nie dzieje, gdy podłączam lub odłączam urządzenia Bluetooth.Funkcja łączenia delegatów Bluetooth iOS nie jest wywoływana
Jestem zdezorientowany, co się dzieje źle. I zainicjować Centralny kierownik/delegata tak:
var btDelegate: CBCentralManagerDelegate = BluetoothDelegate()
var btManager = CBCentralManager(delegate: btDelegate, queue: nil)
BluetoothDelegate jest zdefiniowane tak:
import Foundation
import CoreBluetooth
class BluetoothDelegate : NSObject, CBCentralManagerDelegate {
func centralManager(central: CBCentralManager!, didConnectPeripheral peripheral: CBPeripheral!) {
println("connect") //this line is not called
}
func centralManager(central: CBCentralManager!, didDisconnectPeripheral peripheral: CBPeripheral!, error: NSError!) {
println("disconnect") //this line is not called
}
func centralManagerDidUpdateState(central: CBCentralManager!) {
println("state update") //this line is called
}
}
Uwaga: mogę ciągle otrzymać więcej wydarzeń aktualizacji stanów takich jak, kiedy włączyć Bluetooth, choć podłącz i odłącz nie są wywoływane.
I już nie zapoznałem się jeszcze z tym, jak Swift zachowuje się, gdy masz odniesienie do klasy bazowej, ale przypisać obiekt klasy pochodnej do niej - stąd jeśli btDelegate powinny być wpisz BluttoothDelegate zamiast CBCentralManagerDelegate lub nie mogę powiedzieć. Ale jeśli nie otrzymasz innych odpowiedzi, musisz spróbować. – Gruntcakes
Po prostu próbowałem używać BluetoothDelegate zamiast CBCentralManagerDelegate, ale zachowanie nie było inne. Warto było jednak spróbować. Dzięki za pomoc! – lakantu
To pole w klasie, z której korzystamy; Nie sądzę, że kiedykolwiek wykracza poza zakres. Nie wiedziałem, że to słabe odniesienie - to dobrze wiedzieć. – lakantu