我是编程新手,我可能无法使用正确的术语来描述。
我正在编写一个应用程序,一旦它出现在屏幕上,我想要它。它会自动扫描设备5秒钟并放在桌面视图上以显示详细信息。
我还写了一个动作方法来响应UIBarButtonItem的重载。 动作方法工作正常。它放置设备'关于细胞的信息。
所以,我把这个动作方法放到viewDidLoad块中,以便在加载视图后扫描蓝牙设备。 但它不起作用。但我知道控制器弹出时,动作方法正在运行。但它没有显示有关细胞的任何信息。我需要按重新加载来扫描并列出单元格。
override func viewDidLoad() {
super.viewDidLoad()
btCentralManager = CBCentralManager(delegate: self, queue: nil)
btCentralManager.delegate = self
actionScan(navigationItem.rightBarButtonItem!)
}
重新加载按钮:
@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)
}
控制器弹出后,如何在桌面上扫描并列出?
感谢。
答案 0 :(得分: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只被调用一次。