2016-12-08 3 views
1

Я пытаюсь сканировать устройства Bluetooth на 5 секунд. Однако я не могу реализовать фазу времени. Мой код в настоящее время выглядит так:Как запустить действие за определенное время?

@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

Теперь я удалил функцию stopScanning из области функции startScanning, однако она все равно занимает около 1 с ... У меня что-то отсутствует? scanforperpherals находится чуть ниже таймера –

+0

Это может быть более интересно, чем использование NSTimer только для этого, чтобы сделать 'self.performSelector (afterDelay:)' (или что-то в этом роде). – Larme

ответ

0

Вы могли бы достичь этой задержки, как было предложено @Larme Здесь я переписывать код с подходом @ LARME в

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

Теперь NSTimer не требуется больше с code.and вы можете увеличить или уменьшить время интервал, чтобы остановить сканирование

+0

thanks Dev Я использовал метод, который у меня был ранее, но прислушался к инструкции Larme, чтобы удалить функцию stopScanning, и она сработала. Я тоже попробовал, и все получилось хорошо. Так спасибо :) –

+0

Happy Coding ... :) –

Смежные вопросы