2016-12-08 12 views
1

5のBluetoothデバイスをスキャンしようとしています。しかし私は時相を実装することができません。私のコードは現在次のようになっています:設定した期間にアクションを実行するにはどうすればよいですか?

@IBAction func scanButton(_ sender: Any) 
{ 
    startScanning() 
    let disableScanButton = sender as? UIButton 
    disableScanButton?.isEnabled = true 
} 

func startScanning() 
{ 
    timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.stopScanning), userInfo: nil, repeats: true) 
    print("Start Scan") 
    manager?.scanForPeripherals(withServices: nil, options: nil) 
    print("There are \(peripheralArray.count) no. of peripherals counted for") 
    stopScanning() 
} 

func stopScanning() 
{ 
    timer?.invalidate() 
    print("timer stopped") 
    manager?.stopScan() 
    print("Scan Stopped") 
} 

私はボタンを押してからスキャンします。しかし、それは本当にすばやくすべてのアクションを飛び越えているようです。私はタイマーがそれを保持すると思ったが、それはしない。 startScanning関数のためにそれをループさせるために幾分か?

私は他の人を見ましたが、私は何かを見つけることができません。そしてそれらは非常に複雑に見える。

解決策を探していますが、それだけ簡単です。しかし、単純なことができない場合は、私は誰にもどんな選択肢があっても自由です。

+0

'scanForPeripherals(withServices:options:)'と 'stopScanning()'を呼び出した直後にあなたを呼び出します。その行を削除すると、スキャンは即座に行われません!ですから、 'peripheralArray'にはアイテムがないことがよくあります。 – Larme

+0

私は今startScanning関数の領域からstopScanning関数を削除しましたが、それでもまだ最大約1秒かかるようです... 何か不足していますか? scanforperpheralsはタイマーのすぐ下にあります –

+0

'self.performSelector(afterDelay:)'(またはそのようなもの)を行うためだけにNSTimerを使用するよりも面白いかもしれません。 – Larme

答えて

0

ここ@Larme により示唆されるようにあなたは、この遅延を実現することができ、私は、@ larmeのアプローチを使用してコードを書き直すています今NSTimerをごcode.andでもう必要ありません

@IBAction func scanButton(_ sender: Any) 
{ 
    startScanning() 
    let disableScanButton = sender as? UIButton 
    disableScanButton?.isEnabled = true 
} 

func startScanning() 
{ 
    manager?.scanForPeripherals(withServices: nil, options: nil) 
    self.performSelector(#selector(stopScanning), withObject: self, afterDelay: 5)//here 5 is number of seconds after you want to execute stopScanning function, Increase the time interval or decrease it as your conviniebce 


} 

func stopScanning() 
{ 
    manager?.stopScan() 
    print("Scan Stopped") 
    print("There are \(peripheralArray.count) no. of peripherals counted for") 
} 

あなたは時間を増加または減少させることができますあなたのスキャンを中止する間隔

+0

ありがとうDev 私は以前に持っていた方法を使用しましたが、stopScanning機能を削除するLarmeの指示に耳を傾け、機能しました。 私はあなたも試してみましたが、うまくいきました。 ありがとう:) –

+0

ハッピーコーディング... :) –

関連する問題