2016-06-13 9 views
0

私はプログラミングの新機能です。記述するために適切な用語を使用できない場合があります。uicontrollerに一度表示されたBluetoothデバイスをスキャンする

私は、画面に表示されたらアプリが欲しいアプリを書いています。自動的にデバイスを5秒間スキャンし、テーブルビューを表示して詳細を表示します。

また、UIBarButtonItemのリロードに対応するアクションメソッドを書きました。 アクションメソッドは正常に動作します。デバイスの情報をセルに格納します。

ですから、このアクションメソッドをviewDidLoadブロックに入れて、ビューを読み込んだ後にBluetoothデバイスをスキャンします。 でも動作しません。しかし、コントローラがポップアップすると、アクションメソッドが実行されていることがわかります。ただし、セルに関する情報は表示されません。スキャンしてセルに一覧表示するには、リロードを押す必要があります。

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

コントローラがポップアップしたら、どのように私はテーブルの上にスキャンし、リストすることができますか?

ありがとうございました。

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

と、このようなメソッドを追加:

答えて

2

はCBCentralManagerDelegateメソッドを追加してくださいあなたが任意のメソッドにビューコントローラが画面に表示されるたびに実行したい場合は

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は、View Controllerをロードするときに一度だけ呼び出されます。

+0

私はこのcentralManagerDidUpdateStateメソッドを持っています。私はあなたに続き、このブロックにスキャンアクションメソッドを入れました。それは動作します。どうもありがとうございます。 –

関連する問題