Я читаю метки RFID с устройства BLE. Если я прочитаю одно значение RFID, я не хочу читать одно и то же значение в течение следующей секунды. Для этого я сохраняю это значение в массиве и удаляю его, когда таймер завершает одну секунду.Как остановить NSTimer от перехода к Selector и расширить его другим способом?
{
func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?){
let rfid = (characteristic.value?.description.capitalizedString)!
if readRfids.containsObject(rfid){
if timer.valid{
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(self.timeEnd(_:)), userInfo: nil, repeats: false)
}
}else{
timer.invalidate()
}
if !timer.valid && !readRfids.containsObject(rfid){
readRfids.addObject(rfid)
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(self.timeEnd(_:)), userInfo: nil, repeats: false)
}
}
func timeEnd(sender: Selector){
if !timer.valid{
readRfids.removeLastObject()
}else{
print(timer.fireDate)
}
}
Проблема я столкнулся это timeEnd (_ :) вызывается несколько раз через одну секунду, и readRfids.removeLastObject() никогда называемый. Устройство My BLE отправляет уведомление более чем за 10 секунд за одну секунду. Я хочу прочитать значение, если оно отличается от rfid и продлить таймер еще на одну секунду, если будет прочитано такое же rfid. timer.fireDate начинает печатать через одну секунду и время печати, равное уведомлениям с устройства BLE.
Thank u @ Paulw11. С небольшим изменением кода я смог выполнить свое требование. – Hemanth