2016-06-13 42 views
0

我是編程新手,我可能無法使用適當的術語來描述。掃描藍牙設備一旦出現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) 
} 

我如何可以掃描和名單上的表一旦控制器彈出?

謝謝。

回答

2

嘗試添加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方法。我跟着你,並把掃描行動的方法進入這個塊。它的工作原理。非常感謝。 –