Création d'un UISearchDisplayController par programmation

UISearchDisplayController de créer un UISearchDisplayController programme. J'ai une méthode qui devrait mettre en place mon controller de search, mais quand je l'appelle, rien ne se passe.

Cette méthode ma -setupSearch :

 - (void)setupSearch { UISearchBar *myBar; UISearchDisplayController *myCon; myBar = [[UISearchBar alloc] initWithFrame:CGRectZero]; [myBar sizeToFit]; myCon = [[UISearchDisplayController alloc] initWithSearchBar:myBar contentsController:self]; [myBar release]; myCon.delegate = self; myCon.searchResultsDataSource = self; myCon.searchResultsDelegate = self; /* Setup scopes */ { NSMutableArray *scopes; NSUInteger count, i; NSSsortingng *aScope; count = SCOPE_COUNT; scopes = [[NSMutableArray alloc] initWithCapacity:count]; for(i = 0; i < count; i++) { // I create four scopes here } myCon.searchBar.scopeButtonTitles = scopes; [scopes release]; } [myCon release]; } 

J'appelle la méthode ci-dessus dans la méthode -viewDidLoad de mon UITableViewController sous- UITableViewController . Malheureusement rien ne se passe quand mon controller de vue de table est affiché dans un UITabBarController .

Toute aide serait grandement appréciée.

Consultez l'exemple de code dans: [ https://github.com/JayMarshal/GrabCasts.com-iPhone-Client/blob/master/CoreDataTableViewController.m%5D%5B1%5D

Repo ici: https://github.com/JayMarshal/Grabcasts

C'est une version augmentée du coredatatableviewcontroller des cours de stanford iOS.

Un extrait pertinent de ce code suit:

 - (void)createSearchBar { if (self.searchKey.length) { if (self.tableView && !self.tableView.tableHeaderView) { UISearchBar *searchBar = [[[UISearchBar alloc] init] autorelease]; self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.searchResultsDataSource = self; self.searchDisplayController.delegate = self; searchBar.frame = CGRectMake(0, 0, 0, 38); self.tableView.tableHeaderView = searchBar; } } else { self.tableView.tableHeaderView = nil; } 

Fondamentalement, il associe UISearchDisplayController à self (qui doit être un tableviewcontroller) comme un effet secondaire de l'initialisation. Donc, réglage:

 self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.searchResultsDataSource = self; 

Au lieu de

 myCon.searchResultsDataSource = self; myCon.searchResultsDelegate = self; 

Ça pourrait faire l'affaire. Dans le debugging, vérifiez si myCon et self.searchDisplayController pointent vers le même object?

Mise à jour: il semble y avoir un bug dans la propriété SDC de la TVC qui ne soit pas conservé dans le runloop. Classé comme: http://openradar.appspot.com/10254897 également mentionné sur SO, voir UIViewController ne conserve pas son UISearchDisplayController créé par programmation