2016-12-12 6 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을 준수합니다,하지만 당신은 centralManagerdelegate (CBCentralManagerDelegate) 속성을 설정하지 않았다. 그렇기 때문에 centralManager(_central:didDiscover:advertisementData:rssi)이 호출되지 않습니다.

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