2015-05-20 19 views
7

Tüm Bluetooth bağlantı/bağlantı kesme olaylarını dinlemeyi deniyorum. Delegenin centralManagerDidUpdateState işlevi çağrılsa bile, Bluetooth aygıtlarını bağladığımda veya keserken hiçbir şey olmuyor.iOS Bluetooth temsilci bağlantısı işlevi çağrılmadı

Neyin yanlış gittiğine dair kafam karıştı. Böyle Merkez Müdürü/temsilci başlatmak:

var btDelegate: CBCentralManagerDelegate = BluetoothDelegate() 
var btManager = CBCentralManager(delegate: btDelegate, queue: nil) 

BluetoothDelegate şöyle tanımlanır:

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 
    } 
} 

Not: Ben sürekli rağmen böyle ben Bluetooth geçiş yaparken daha devlet güncelleme olaylarını alabilir bağlayın ve bağlantı kesilmez.

+0

tüm ayrıntılar için this documentation geçmesi gerektiğini CBCentralManagerDelegate yerine BluttoothDelegate yazın veya söyleyemiyorum. Ama başka bir cevap alamazsan, denenecek bir şey. – Gruntcakes

+0

CBCentralManagerDelegate yerine BluetoothDelegate kullanmayı denedim, ancak davranış farklı değildi. Yine de denemeye değerdi. Yardım için teşekkürler! – lakantu

+0

Kullandığımız bir sınıfta bir alan; Hiçbir zaman kapsam dışında kaldığını sanmıyorum. Zaten zayıf bir referans olduğunu bilmiyordum - bu bilmek güzel. – lakantu

cevap

1

Kodunuzdan, çevre birimleri taramaya başlamadığınız görülüyor. Merkezinizin centralManagerDidUpdateState yönteminden güç aldığını doğruladıktan sonra çevre birimleriniz için taramayı başlatmalısınız.

(Bluetooth ayarları panelinden bağladığınız bluetooth aygıtları ilgisizdir.) Onlara erişemezsiniz. (bildiğim kadarıyla) Aşağıdaki kodu kendi cihazınızda taramak ve bulmak istediğinizi varsayalım Eğer bir periferikkeşfetmek zaman (sen) tüm istiyorsanız nil kullanın Bundan sonra

func startScan(){ 
    if let central = btManager { 
    central.scanForPeripheralsWithServices(nil, options: nil) 
    println("started Scanning") 
    } 
} 

hizmet UUID sağlayabilir)

func centralManagerDidUpdateState(central: CBCentralManager!) { 
    switch (central.state) { 
    case CBCentralManagerState.PoweredOff: 
    break 
    case CBCentralManagerState.PoweredOn: 
    startScan() // start scanning once the bluetooth is On 
    break 
    default: 
    break 
    } 
} 

yardımcı olacaktır Ve startScan yöntem olacaktır İlk önceyöntemi çağrılacaktır. Oradan

func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!) { 
    println(peripheral) 
    // btManager.connectPeripheral(peripheral, options: nil) 
} 

Eğer periferik toplamak ve daha sonra CBCentralManager ait connectPeripheral yöntemi çağırmak. Bağlantı başarılı olursa didConnectPeripheral yöntemi çağrılacaktır. dolayısıyla btDelegate olmalı, eğer -

Sen

Sana bir temel sınıf bir başvuru var ama buna bir türetilmiş sınıf nesnesi atadığınızda Swift nasıl davranacağını ile henüz edinmiş ettik
İlgili konular