title: Exception in iPhone app : Modal transition is already in progress
body: <p>I have what I believe is a fairly simple application at the moment based on a few tutorials cobbled together.  I'm using XCode 3.2.3 in OSX 10.6.4.  It started as a standard iPhone "Window Based Application".  Using interface builder I have added a Tab Bar Controller using the O'Reilly video tutorial here:</p>
  
  <p><a href="http://broadcast.oreilly.com/2009/06/tab-bars-and-navigation-bars-t.html" rel="noreferrer">http://broadcast.oreilly.com/2009/06/tab-bars-and-navigation-bars-t.html</a></p>
  
  <p>In the first Tab I have a standard UIView with two buttons.  Both call the same function to display a UIImagePickerController:</p>
  
  <pre><code>-(IBAction) btnPhotoClicked:(id)sender {
  UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
  imagePicker.delegate = self;
  if((UIButton *)sender == btnChoosePhoto)
  {
      imagePicker.allowsEditing = YES;
      imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  } else {
      imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
  }
  
  [self presentModalViewController:imagePicker animated:YES];
  [imagePicker release];
  }
  </code></pre>
  
  <p>I am running the code inside an emulator so only ever click the button called Choose Photo.  When the dialogue is released with a photo chosen this function runs:</p>
  
  <pre><code>-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary  *)info {
  NSURL *mediaUrl;
  
  mediaUrl = (NSURL *)[info valueForKey:UIImagePickerControllerMediaURL];
  
  if (mediaUrl == nil)
  {
      imagePuzzle = (UIImage *) [info valueForKey:UIImagePickerControllerEditedImage];
      if(imagePuzzle == nil)
      {
          //--- Original Image was selected ---
          imagePuzzle = (UIImage *) [info valueForKey:UIImagePickerControllerOriginalImage];
      }
      else {
          //--- Get the edited image ---
          //--- If it was successful the above valueForKey:UIImagePickerControllerEditedImage
          //--- would have assigned it already.
      }
  }
  else {
      //--- Muppet selected a video
  }
  
  // Animate the picker window going away
  [picker dismissModalViewControllerAnimated:YES];
  ImageViewController *imageViewController = [[ImageViewController alloc] init];
  imageViewController.delegate = self;    
  [self presentModalViewController:imageViewController animated:YES];
  [imageViewController release];
  }
  </code></pre>
  
  <p>This is where my problem lies.  I've tried many different hacks and iterations but the above code is the simplest to present the problem.  When the imageViewController is displayed as a modal dialogue the following exception is thrown:</p>
  
  <pre><code>2010-07-09 15:29:29.667 Golovomka[15183:207] *** Terminating app due to uncaught
  exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal
  transition from &lt;NewViewController: 0x5915f80&gt; to &lt;ImageViewController: 0x594a350&gt;     
  while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear
  to know the current transition has completed'
  </code></pre>
  
  <p>How do I cure this?  I have tried delays and other tricks but do not really understand how I'm supposed to use viewDidAppear or viewDidDisappear to help me.  Also of note is that a very basic application with one view loading the picker then displaying another view with the image in does not produce the error.  Any help gratefully received.</p>