シナリオは次のとおりです。アプリの連絡先リストからフィルター処理された結果を表示し、アドレス帳にも表示される SearchController があります。
ABPersonViewController をプッシュするコードは、私の didSelectObject:atIndex メソッドにあります。コードは次のとおりです。
TableCellClass *selectedCell= (TableCellClass *)[self.tableView cellForRowAtIndexPath:indexPath];
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef arrayOfAllPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
ABRecordRef thisPerson = CFArrayGetValueAtIndex(arrayOfAllPeople,selectedCell.contactIndex);
ABPersonViewController *picker = [[ABPersonViewController alloc]init];
picker.personViewDelegate = self;
picker.displayedPerson = thisPerson;
picker.allowsEditing = YES;
[self.navigationController pushViewController:picker animated:YES];
このコード ブロックは、標準の TTTableViewController では問題なく動作しますが、私の searchController では動作しません。
ちなみにスクリーンショットはこちら。ご覧のとおり、NavigationController は存在しません。これは Three20 のデフォルトです。アドレス帳アイコンのあるセルは、タップ ジェスチャで ABPersonViewController を起動するアイテムです。