searchDisplayController obsoleto en iOS 8

¿Cómo se corrige lo siguiente para que no aparezcan las advertencias? ¿Qué me estoy perdiendo?

Al corregir searchResultsController para searchController me da un error “objeto no encontrado”

 if (tableView == self.searchDisplayController.searchResultsTableView) { cell.textLabel.text = [searchResults objectAtIndex:indexPath.row]; } else { cell.textLabel.text = [_content objectAtIndex:indexPath.row]; } return cell; } -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self filterContentForSearchText:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; return YES; } 

La clase UISearchController reemplaza la clase UISearchDisplayController para administrar la visualización de las interfaces relacionadas con la búsqueda.

Fuente: https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html

Entonces, como dijo rmaddy, si quiere deshacerse de las advertencias desaprobadas, deje de usar las clases obsoletas. Use UISearchController en UISearchController lugar:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchController/index.html#//apple_ref/occ/cl/UISearchController

Agregue esto a su archivo .h

  NSArray *searchResultsArray; NSMutableArray *userMutableArray; @property (retain, nonatomic) UISearchController *searchController; 

y esto a tu archivo .m

 userMutableArray = [[NSMutableArray alloc] initWithObjects:@"Jack",@"Julie", nil]; searchResultsArray = [[NSArray alloc]init]; self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; self.searchController.searchBar.scopeButtonTitles = [[NSArray alloc]initWithObjects:@"UserId", @"JobTitleName", nil]; self.searchController.searchBar.delegate = self; self.searchController.searchResultsUpdater = self; [self.searchController.searchBar sizeToFit]; self.searchController.dimsBackgroundDuringPresentation = NO; self.definesPresentationContext = YES; self.tableView.tableHeaderView = self.searchController.searchBar; -(void)updateSearchResultsForSearchController:(UISearchController *)searchController{ NSString *searchString = self.searchController.searchBar.text; NSPredicate *resultPredicate; NSInteger scope = self.searchController.searchBar.selectedScopeButtonIndex; if(scope == 0){ resultPredicate = [NSPredicate predicateWithFormat:@"userId contains[c] %@",searchString]; }else{ resultPredicate = [NSPredicate predicateWithFormat:@"jobTitleName contains[c] %@",searchString]; } searchResultsArray = [userMutableArray filteredArrayUsingPredicate:resultPredicate]; [self.tableView reloadData]; } - (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{ [self updateSearchResultsForSearchController:self.searchController]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(self.searchController.active){ return [searchResultsArray count]; }else{ return [userMutableArray count]; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if(!cell){ cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } if(self.searchController.active){ cell.textLabel.text = [searchResultsArray objectAtIndex:indexPath.row]; }else{ cell.textLabel.text = [userMutableArray objectAtIndex:indexPath.row]; } return cell; } 

Estaba buscando migrar desde UISearchDisplayController a UISearchController . Entonces, encontré esto en GitHub: https://github.com/dempseyatgithub/Sample-UISearchController
Descárguelo / UITableView y podrá ver cómo usar UISearchController con UITableView y UICollectionView .
Tiene todo lo que necesita para actualizar de UISearchDisplayController a UISearchController .
La documentación de UISearchController también es muy útil. Para comenzar, mira Sample-UISearchController / MasterViewController_TableResults.m y Sample-UISearchController / MasterViewController_FilterResults.m
Si también necesita soportar iOS 7 (algo que recomiendo personalmente si está a punto de implementar su aplicación en la App Store), haga lo siguiente:

 if([UISearchController class]){ //Create an UISearchController and add it to your UITableViewController }else{ //Create an UISearchDisplayController and add it to your UITableViewController } 

Nota: Tendrá que hacer todo programáticamente si desea admitir ambas versiones de iOS.

Hemos estado trabajando durante mucho tiempo para que el nuevo UISearchController gire correctamente.

Esto es lo que parecía antes:

Después de mucho tiempo, esencialmente “nos dimos por vencidos” al hacer que la rotación funcionara correctamente. En cambio, simplemente ocultamos el controlador de búsqueda antes de que ocurra la rotación. Luego, el usuario tiene que tocar el botón de búsqueda en la vista girada para volver a abrir la barra de búsqueda.

Aquí está el código relevante:

 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [self.searchController dismissViewControllerAnimated:YES completion:nil]; self.searchControllerWasActive = NO; self.searchButton.enabled = YES; } 

Nota importante: nuestro código usa un UIViewController y no UITableViewController. La pantalla requiere botones adicionales por lo que no podemos usar UITableViewController. El uso de UISearchController en un UITableViewController no presenta los problemas de rotación.

Vemos esto como un trabajo necesario dado el estado actual de UISearchController. Sería mucho mejor tener una solución real a este problema.