В этой строке есть несколько проблем:
[[NSRunLoop currentRunLoop] addTimer:ApplicationDelegate.timer forMode:NSRunLoopCommonModes];
Во-первых, это вообще не нужно. -scheduledTimerWithTimeInterval:...
уже добавляет таймер в цикл запуска. Вам не нужно добавлять его снова.
Во-вторых, локальная переменная timer
не связана со свойством ApplicationDelegate.timer
(которое предположительно nil
на данный момент).
Если вы так много разговариваете с делегатом приложения, что создали нечто, называемое ApplicationDelegate
(глобальный «макрос»), вы слишком много говорите с ним. Делегат приложения является делегатом приложения; он помогает запускать, останавливать приложение и реагировать на системные события. Делегат приложения не является местом для хранения глобальных переменных. В любом случае, таймер - это не та вещь, которую вы могли бы извлечь из другого объекта.