Как может автовыделение UISearchDisplayController вызвать сбой в другом контроллере представления?

У меня есть два контроллера представления A и B. От A я перехожу, чтобы просмотреть контроллер B следующим образом:

// in View Controller A 
// navigateToB method

-(void) navigateToB {

BViewController *bViewController = 
[[BViewController alloc] initWithNibName: @"BView" bundle:nil];

bViewController.bProperty1 = SOME_STRING_CONSTANT;
bViewController.title = @"A TITLE OF A VC's CHOOSING"; 
[self.navigationController pushViewController: bViewController animated:YES];
[bViewController release]; //<----- releasing 0x406c1e0

}

В BViewController свойство bPropery1 определяется с копией, как показано ниже (обратите внимание, что B также содержит UITableView и другие свойства):

@property (nonatomic, copy) NSString *bProperty1;

Казалось, что все работает нормально при переходе назад и вперед между A и B. Пока я не добавил UISearchDisplayController в табличное представление, содержащееся в BViewController. Теперь, когда я перемещаюсь из B, обратно к A, приложение вылетает.

Трассировка стека показывает, как выглядит контроллер дисплея поиска, автоматически высвобождаемый в момент сбоя:

#0 0x009663a7 in ___forwarding___
#1 0x009426c2 in __forwarding_prep_0___
#2 0x018c8539 in -[UISearchDisplayController _destroyManagedTableView]
#3 0x018c8ea4 in -[UISearchDisplayController dealloc]
#4 0x00285ce5 in NSPopAutoreleasePool

NSZombies показывает:

-[BViewController respondsToSelector:]: message sent to deallocated instance 0x406c1e0

И история malloc в этом отношении указывает на bViewController, уже выпущенный в методе navigateToB A выше:

    Call [2] [arg=132]: thread_a065e720 |start  ... <snip> 
..._sendActionsForEvents:withEvent:] | -[UIControl sendAction:to:forEvent:] | -
[UIApplication sendAction:to:from:forEvent:] | -[**AViewController navigateToB**] | 
+[NSObject alloc] | +[NSObject allocWithZone:] | _internal_class_createInstance | 
_internal_class_createInstanceFromZone | calloc | malloc_zone_calloc 

Может кто-нибудь дать мне какие-нибудь идеи о том, что здесь происходит? В методе navigateToB, как только bViewController выпущен (после pushViewController), это должно быть для bViewController. Ничто другое даже не знает об этом, поскольку он является локальным по отношению к блоку метода navigateToB, и он был освобожден.

При переходе от B к A ничего не вызывается в viewDidLoad, viewWillAppear и т. Д., Которые повторно вводят navigateToB.

Похоже, что контроллер дисплея поиска имеет ссылку на что-то в моем AViewController, и, поскольку он автоматически выпускается, он забирает это «что-то», но я не могу понять, как это возможно, тем более, что я использую копию для передачи данных между А и Б.

Я иду над этим. Я уверен, что это где-то моя ошибка, и поэтому я обращаюсь к вам, легенды Stack Overflow, за любые слова мудрости или советы о том, как решить эту проблему.

Большое спасибо.