2016-06-13 3 views
0

Ich bin neu in der Programmierung, kann ich nicht in der Lage sein, die richtigen Begriffe zu beschreiben.scannen Bluetooth-Gerät einmal erscheint der uicontroller

Ich schreibe eine App, die ich will die App, sobald es auf dem Bildschirm erscheint. Es scannt das Gerät automatisch für 5 Sekunden und legt die Tischansicht an, um die Details anzuzeigen.

Ich schrieb auch eine Aktionsmethode, um das Neuladen von UIBarButtonItem zu beantworten. die Aktionsmethode funktioniert gut. Es setzt die Informationen der Geräte in die Zelle.

also, ich lege diese Aktionsmethode in ViewDidLoad Block, um die Bluetooth-Geräte einmal die geladene Ansicht zu scannen. aber es funktioniert nicht. Aber ich weiß, wenn der Controller auftaucht, läuft die Aktionsmethode. aber es zeigt keine Informationen über die Zelle. Ich muss neu laden drücken, um die Zelle zu scannen und aufzulisten.

override func viewDidLoad() { 
    super.viewDidLoad() 

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

    actionScan(navigationItem.rightBarButtonItem!) 
} 

die Reload-Button:

@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) 
} 

Wie kann ich scannen und Liste auf den Tisch, wenn der Controller oben knallt?

danke.

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

und fügen Sie Methoden wie folgt aus::

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() 
    } 

Wenn Sie jedes Mal View-Controller auf dem Bildschirm erscheint jede Methode ausführen möchten - rufen diese Methoden von viewWillAppear

Antwort

2

Try CBCentralManagerDelegate Methode hinzufügen oder aus viewDidAppear. viewDidLoad werden nur einmal aufgerufen, wenn Sie Ihren View-Controller laden.

+0

Ich hatte diese centralManagerDidUpdateState-Methode. Ich folgte dir und legte die Scanaktionsmethode in diesen Block. und es funktioniert. ich danke dir sehr. –