Ich lese RFID-Tags von einem BLE-Gerät. Wenn ich einen bestimmten RFID-Wert lese, möchte ich nicht den gleichen Wert für die nächste Sekunde lesen. Dafür speichere ich diesen Wert in einem Array und lösche ihn, wenn der Timer eine Sekunde beendet.Wie man NSTimer davon abhält, zu Selector zu gehen und es in einer anderen Methode zu erweitern?
{
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)
}
}
Das Problem, das ich mit Blick auf bin ist die TimeEnd (_ :) wird mehrmals nach einer Sekunde aufgerufen wird, und readRfids.removeLastObject() ist nie gerufen werden. Mein BLE-Gerät sendet eine Benachrichtigung mehr als 10 Mal in einer Sekunde. Ich möchte den Wert lesen, wenn es anders ist rfid und den Timer für eine weitere Sekunde verlängern, wenn die selbe rfid gelesen wird. timer.fireDate beginnt nach einer Sekunde zu drucken und die Druckzeiten entsprechen den Benachrichtigungen des BLE-Geräts.
Vielen Dank @ Paulw11. Mit ein wenig Codeänderung konnte ich meine Anforderung erfüllen. – Hemanth