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関数のためにそれをループさせるために幾分か?
私は他の人を見ましたが、私は何かを見つけることができません。そしてそれらは非常に複雑に見える。
解決策を探していますが、それだけ簡単です。しかし、単純なことができない場合は、私は誰にもどんな選択肢があっても自由です。
'scanForPeripherals(withServices:options:)'と 'stopScanning()'を呼び出した直後にあなたを呼び出します。その行を削除すると、スキャンは即座に行われません!ですから、 'peripheralArray'にはアイテムがないことがよくあります。 – Larme
私は今startScanning関数の領域からstopScanning関数を削除しましたが、それでもまだ最大約1秒かかるようです... 何か不足していますか? scanforperpheralsはタイマーのすぐ下にあります –
'self.performSelector(afterDelay:)'(またはそのようなもの)を行うためだけにNSTimerを使用するよりも面白いかもしれません。 – Larme