扫描蓝牙设备一旦出现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。
我有这个centralManagerDidUpdateState方法。我跟着你,并把扫描行动的方法进入这个块。它的工作原理。非常感谢。 –