title: Crash in ABPeoplePicker when called from another modal viewcontroller and both dismissed
body: <p>(Note: I filed this question before in the context of my project, but I've now recreated the crash in a test project. Any help in telling me what I'm doing wrong would be appreciated.)</p>
  
  <p>The crash occurs when calling ABPeoplePicker from another modal viewcontroller.  Specifically, the main window has a NavController, which loads myVC. myVC then loads a modal NavController containing my controller, which then calls ABPeoplePicker. In this demo program, no user intervention is necessary until ABPeoplePicker runs.</p>
  
  <p>The crash occurs if you use the search box in the people picker, and then select one of the resulting people. (If you use the simulator, you'll need to add a person in Contacts before running the program.) The program returns, but during the dismissal of the two modal VCs, I get an assertion error crash.  It occurs every time on iphone, ipad, and simulators for both.  This seems a very normal thing to do, so I find it hard to believe this is a real bug. The crash message is:</p>
  
  <blockquote>
    <p>Assertion failure in
    -[ABMembersSearchDisplayController setActive:animated:],
    /SourceCache/UIKit_Sim/UIKit-1448.69/UISearchDisplayController.m:589 2011-01-31 13:51:11.903
    testcrasher2[26044:207] <em>*</em>
    Terminating app due to uncaught
    exception
    'NSInternalInconsistencyException',
    reason: 'search contents navigation
    controller must not change between
    -setActive:YES and -setActive:NO'</p>
  </blockquote>
  
  <p>So to demonstrate, in a new Xcode iPhone Window application, I modify the didFinishLaunchingWithOptions to call my controller.  Then I create two VCs as follows. (Note you need to add Addressbook frameworks to the target.) Here's the entire program...</p>
  
  <p>AppDelegate.didFinishLaunchingWithOptions:</p>
  
  <pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
      myViewController *detailViewController = [[myViewController alloc] init];
  
      // Set the navigation controller as the window's root view controller and display.
      UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: detailViewController];
  
      self.window.rootViewController = navController;
      [self.window makeKeyAndVisible];
  
      [detailViewController release];
      [navController release];
  
      return YES;
  }
  </code></pre>
  
  <p>myViewController.h:</p>
  
  <pre><code>@interface myViewController :  UIViewController&lt;addDelegate&gt;{
   }
  @end
  </code></pre>
  
  <p>myViewController.m:</p>
  
  <pre><code>#import "myViewController.h"
  #import "AddNewViewController.h"        
  
  @implementation myViewController
  
  - (void)controllerDidFinish:(addNewViewController *)controller  {
      [self dismissModalViewControllerAnimated:YES];
  }
  
  -(void) viewWillAppear:(BOOL)animated  {
      [super viewWillAppear: animated];
  
      addNewViewController *addController = [[addNewViewController alloc] init];
      addController.delegate = self;
  
      UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addController];
      [self presentModalViewController:navController animated:YES];
  
      [navController release];
      [addController release];
  }
  
  @end
  </code></pre>
  
  <p>AddNewViewController.h:</p>
  
  <pre><code>#import &lt;AddressBookUI/AddressBookUI.h&gt;
  
  @protocol addDelegate;
  
  @interface addNewViewController : UIViewController  &lt; ABPeoplePickerNavigationControllerDelegate&gt; {
      id &lt;addDelegate&gt; delegate;  
  }
      @property(nonatomic, assign) id &lt;addDelegate&gt; delegate;
  @end
  
  
  @protocol addDelegate &lt;NSObject&gt; 
      - (void)controllerDidFinish:(addNewViewController *)controller ; 
  @end
  </code></pre>
  
  <p>AddNewViewController.m:</p>
  
  <pre><code>#import "AddNewViewController.h"
  
  @implementation addNewViewController
  
  @synthesize delegate;
  
  -(void) viewDidAppear:(BOOL)animated {  
      ABPeoplePickerNavigationController * peoplepicker =  [[ABPeoplePickerNavigationController alloc] init] ;    
      peoplepicker.peoplePickerDelegate = self;
      [self presentModalViewController:peoplepicker animated:YES];
      [peoplepicker release];
  }
  
  #pragma mark AddressBook delegate methods
  
  - (void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController *)peoplePicker { 
      [self dismissModalViewControllerAnimated:YES];
  }
  
  - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker
        shouldContinueAfterSelectingPerson:(ABRecordRef)person {
      [self.delegate controllerDidFinish:self ];  
      return NO;   //EDIT:  This MUST be YES or it will crash (see answer below)
  }
  
  - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
        shouldContinueAfterSelectingPerson:(ABRecordRef)person
        property:(ABPropertyID)property 
        identifier:(ABMultiValueIdentifier)identifier {
      return NO;
  }
  
  @end
  </code></pre>