Что происходит, вы вызываете метод resetIdleTimer каждый раз, когда пользователь нажимает на экран. Это увеличивает счет сохранения idleTimer каждый раз, потому что вы сохранили его. Причина сбоя вашего приложения, если вы не сохраняете его, заключается в том, что вы получаете автоматически освобожденный объект NSTimer из метода класса NSTimer
idleTimer=[NSTimer scheduledTimerWithTimeInterval:maxIdleTime target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];
Это означает, что вы не можете использовать этот объект вне этого конкретного метода, как вы используете в методе resetApplication. Теперь вы можете проверять счетчик каждый раз, когда сохраняете его, но это хлопотно. Поэтому я предлагаю объявить idleTimer как свойство сохранения.
@property (retain) NSTimer *idleTimer;
и синтезировать его сеттеры и геттеры после реализации.
@synthesize idleTimer;
теперь используйте
self.idleTimer=[NSTimer scheduledTimerWithTimeInterval:maxIdleTime target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];
и освобождайте idleTimer только в вашей ячейке.