Basically any time your view actually reappears on screen, not just the first time.
It seems like the invalidation in the "encounter error" method didnt work. The timer invalidation should happen on the thread where it is scheduled, in above case it is called on another thread (call backs).
Can you have a method that does this invalidation and call that method using 'perform Selector On Main Thread' at your call back methods?
You can probably recall quite easily one of your cases.
As you can see, passing such a simple information through half of the VIPER structure may be one of the reasons to start looking for an alternative.
Once you've invalidated an NSTimer, you shouldn't use it again.