title: NSTimer in AppDelegate never fires
body: <p>I need to start an NSTimer arbitrarily that will repeat every N seconds until I stop it. <strong>It's not repeating.</strong></p>
  
  <p><strong>I've tried SO solutions</strong> described <a href="https://stackoverflow.com/questions/10553480/nstimer-not-repeating-from-appdelegate">here</a>, <a href="https://stackoverflow.com/questions/4773559/iphone-nstimer-not-repeating-after-fire">here</a> and <a href="https://stackoverflow.com/questions/6752234/nstimer-not-firing">here</a>. None of the the accepted answers are working.</p>
  
  <p>Here's what I've done. My UIViewController is calling:</p>
  
  <pre><code>[AppDelegate doStartMessageRefresh];
  </code></pre>
  
  <p>In AppDelegate.m:</p>
  
  <pre><code>#define MESSAGE_REFRESH_INTERVAL_SECONDS    3.0
  @property (nonatomic, retain, strong) NSTimer *messageRefreshTimer;
  - (void) doInvokerForDoStartMessageRefresh
  {
      NSLog(@"%s", __FUNCTION__);
      NSLog(@"%@", [self.messageRefreshTimer fireDate]);
  }
  - (void) doStartMessageRefresh {
      NSLog(@"%s", __FUNCTION__);
      /*
      self.messageRefreshTimer = [NSTimer scheduledTimerWithTimeInterval:MESSAGE_REFRESH_INTERVAL_SECONDS
                                                                  target:self
                                                                selector:@selector(doInvokerForDoStartMessageRefresh)
                                                                userInfo:nil
                                                                 repeats:YES];
      */
      self.messageRefreshTimer = [NSTimer timerWithTimeInterval:MESSAGE_REFRESH_INTERVAL_SECONDS
                                                         target:self
                                                       selector:@selector(doInvokerForDoStartMessageRefresh)
                                                       userInfo:Nil
                                                        repeats:YES];
      // [self.messageRefreshTimer fire];
      //[[NSRunLoop currentRunLoop] addTimer:self.messageRefreshTimer forMode:NSRunLoopCommonModes];
      [[NSRunLoop currentRunLoop] addTimer:self.messageRefreshTimer forMode:NSDefaultRunLoopMode];
  }
  </code></pre>
  
  <p>The only log line that's printing out is:</p>
  
  <pre><code>2014-05-02 16:34:20.248 myappnamehere[9977:6807] -[AppDelegate doStartMessageRefresh]
  </code></pre>
  
  <p>If I uncomment the line [self.messageRefreshTimer fire]; it runs once.</p>
  
  <p>If I formulate the selector like: @selector(doInvokerForDoStartMessageRefresh:) and manually fire, I get an <em>unrecognized selector sent</em></p>