I am creating and firing a NSTimer
with:
ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:sel
You can also copy your code inside this block, which inserts the creation of the Timer in the main thread.
The code will therefore remain:
dispatch_async(dispatch_get_main_queue(), ^{
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];
});
I don't know why but Timer.scheduledTimer method is not working but Timer.init method worked.
self.timer = Timer.init(timeInterval: 10.0, repeats: true, block: { (timer) in
print("\n--------------------TIMER FIRED--------------\n")
self.checkForDownload()
})
RunLoop.main.add(self.timer!, forMode: RunLoopMode.defaultRunLoopMode)
You could write the same thing in Swift without running in main loops by:
ncTimer = Timer.scheduledTimer(timeInterval: 1.0,
target: self,
selector: #selector(self.handleTimer),
userInfo: nil,
repeats: true)
ncTimer.fire()
Swift timer with closure:
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
// Do whatever
}
timer.fire()
Got it
Adding timer to mainRunLoop
made it working
You can't just assign to the timer that you have put as a property in your header. This should work:
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];
Also: The fire method fires the timer, out of cycle. If the timer is non repeating it is invalidated. After the line that says fire, add this:
BOOL timerState = [ncTimer isValid];
NSLog(@"Timer Validity is: %@", timerState?@"YES":@"NO");