Timers won't fire unless they are scheduled in a thread with a running run loop. performSelectorInBackground:..
makes no such guarantee that the work will be scheduled in a thread with a runloop and, in any case, as soon as the invoked selector exits, the thread may be reaped.
To fix, move that timer to a thread with a running run loop. The main thread is likely the best choice given that you are mucking w/UI bits.