I would suggest inspecting the way you use your MessagePlayerViewController
. It seems to me that both the stack trace and the behaviour you describe hint at the fact that it is the controller that is being deallocated earlier than your timer.
Take into account the fact that the run loop where the timer is scheduled will keep the timer alive.
Maybe the fix is as simple as calling invalidate
in your controller's dealloc
method (or somewhere else where it makes sense), but if you do not provide more code, it is not possible to say.