title: Using sleep within iPhone apps (esp. with UINavigationController)
body: <p>I'm pretty new to iPhone development but I'm close to releasing my first app (related to a website I run). The app requires a very large database and as such I've decided to store only the most commonly used data locally, retrieving the other data via a JSON web service call from the database my website runs off.</p>
  
  <p>Whilst performing OK using the simulator (hitting the live DB) searches relying on the web service call have been taking longer than I'd have hoped they would when running on the phone. These calls look much worse when compared to the native searches which are instantaneous. To reduce the relative difference I wanted to put in a fake interstitial (page with activity indicator) for the native searches (the web service searches already use one) but I've been having an issue with the timing of navigation controller pushes when combined  with sleep(n). </p>
  
  <p>Anyway, the search section of my app is a navController wihin a tabController tab. When trying to use code like this:</p>
  
  <pre>[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES];
  sleep(2);</pre>
  
  <p>I find that the push always waits for the sleep to finish before executing when the effect I want is for the viewcontroller to be pushed and then the app to wait for two seconds before continuing to simulate the search process.</p>
  
  <p>I've had some other weird results with navController pushes, on a few occasions I've experienced what seems to be a mashing of two separate viewcontrollers when the one I've pushed as interstitial remains in place content-wise with only the title of the one I want pushed in it's place remaining.</p>
  
  <p>I'm sure that there is a fundamental lack of understanding on my part to blame so I'm hoping for a bit of guidance here.</p>
  
  <p>Cheers,</p>
  
  <p>Alan.</p>