searchDisplayController en desuso en iOS 8

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

Al corregir searchResultsController para searchController me da un error "object 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 class UISearchController reemplaza la class UISearchDisplayController para gestionar la visualización de 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 classs en desuso. 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 file .h

 <UISearchBarDelegate,UISearchResultsUpdating> NSArray *searchResultsArray; NSMutableArray *userMutableArray; @property (retain, nonatomic) UISearchController *searchController; 

y esto a su file .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; NSPnetworkingicate *resultPnetworkingicate; NSInteger scope = self.searchController.searchBar.selectedScopeButtonIndex; if(scope == 0){ resultPnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"userId contains[c] %@",searchString]; }else{ resultPnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"jobTitleName contains[c] %@",searchString]; } searchResultsArray = [userMutableArray filtenetworkingArrayUsingPnetworkingicate:resultPnetworkingicate]; [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 de UISearchDisplayController a UISearchController . Entonces, encontré esto en GitHub: https://github.com/dempseyatgithub/Sample-UISearchController
Descargar / clonarlo y podrá ver cómo usar UISearchController con UITableView y UICollectionView .
Tiene todo lo que necesita para actualizar de UISearchDisplayController a UISearchController .
La documentation UISearchController también es muy útil. Para comenzar, mire el Sample- UISearchController / MasterViewController_TableResults.m y Sample-UISearchController / MasterViewController_FilterResults.m
Si también necesita admitir iOS 7 (algo que yo personalmente recomiendo si está realmente dispuesto a implementar su aplicación en 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 de forma programática si desea admitir ambas versiones de iOS.

Llevamos mucho time trabajando para que el nuevo UISearchController gire correctamente.

Esto es lo que parecía antes:

Después de mucho time, básicamente nos "dimos por vencidos" al hacer que la rotation funcionara correctamente. En cambio, simplemente ocultamos el controller de búsqueda antes de que ocurra la rotation. Luego, el usuario debe tocar el button de búsqueda en la vista girada para volver a mostrar la barra de búsqueda.

Aquí está el código relevante:

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

Nota importante: nuestro código utiliza un UIViewController y no UITableViewController. La pantalla requiere botones adicionales, por lo que no podemos usar UITableViewController. Usar UISearchController en un UITableViewController no muestra los problemas de rotation.

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