扫描蓝牙设备一旦出现uicontroller

问题描述:

我是编程新手,我可能无法使用适当的术语来描述。扫描蓝牙设备一旦出现uicontroller

我正在写一个应用程序,我希望应用程序一旦出现在屏幕上。它会自动扫描设备5秒钟并放在桌面视图上以显示详细信息。

我也写了一个动作方法来响应UIBarButtonItem的重载。 该操作方法正常工作。它将设备的信息放在单元上。

所以,我把这个动作方法放到viewDidLoad块中,以便一旦视图加载就扫描蓝牙设备。 但它不起作用。但是我知道控制器何时弹出,操作方法正在运行。但它不显示关于单元格的任何信息。我需要按重新加载扫描并在单元格上列出。

override func viewDidLoad() { 
    super.viewDidLoad() 

    btCentralManager = CBCentralManager(delegate: self, queue: nil) 
    btCentralManager.delegate = self 

    actionScan(navigationItem.rightBarButtonItem!) 
} 

Reload按钮:

@IBAction func actionScan(sender: UIBarButtonItem) { // works fine. 
    sender.enabled = false 
    navigationItem.title = "Scanning..." 
    btConnectable.removeAll() 
    btPeripherals.removeAll() 
    btRSSIs.removeAll() 
    NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(ScanTableViewController.stopScan), userInfo: nil, repeats: false) 
    btCentralManager.scanForPeripheralsWithServices(nil, options: nil) 
} 

我如何可以扫描和名单上的表一旦控制器弹出?

谢谢。

尝试添加CBCentralManagerDelegate方法:

func centralManagerDidUpdateState(central: CBCentralManager) { 
     if central.state == CBCentralManagerState.PoweredOn { 
      startScan() 
     } 
} 

和添加方法是这样的:

func startScan() { 
     self.timer?.invalidate() 
     self.centralManager?.scanForPeripheralsWithServices(nil, options: nil) 
     self.timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: "stopScan", userInfo: nil, repeats: false) 
    } 

    func stopScan() { 
     self.centralManager?.stopScan() 
    } 

如果你想每次运行视图控制器出现在屏幕上的任何方法 - 调用从viewWillAppear中这些方法,或从viewDidAppear。当您加载视图控制器时,只调用一次viewDidLoad。

+0

我有这个centralManagerDidUpdateState方法。我跟着你,并把扫描行动的方法进入这个块。它的工作原理。非常感谢。 –