2016-12-12 5 views
0

私の周りの低エネルギーの周辺機器を見つけるためにCBCentralManagerを使いたいです。 centralManagerが開始され、正しく開始され、スキャンされています。しかしdidDiscover関数は決して呼び出されません。私はこれと同様の問題に他のすべての記事を読んで、私の問題が同じ原因ではないことを99%確信しています。それでも、私は間違ったことは見つけられません。した周辺機器が見つかりません

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

あなたはcentralManager' 'のデリゲートを設定しませんでした。 – Larme

+0

@Larme:私は確かに答えとしてそれを受け入れられるように追加します。 –

+0

は間違いなく助けになりました。ありがとうございました!私はこれを正しい答えとしてマークしたい! – user6155118

答えて

0

optional func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)CBCentralManagerDelegate方法です。

あなたのクラスSmallerBeaconServiceImplCBCentralManagerDelegateに準拠していますが、centralManagerdelegateCBCentralManagerDelegate)プロパティを設定しませんでした。そのため、centralManager(_central:didDiscover:advertisementData:rssi)は呼び出されません。

これはで固定することができます。

centralManager = CBCentralManager(delegate: self, queue: nil) 
関連する問題