2016-12-04 3 views
1

Ich versuche, einen UISearchController in einem TableViewController zu implementieren. Nachdem ich den Text in der Suchleiste eingegeben habe, erhalte ich in der Konsole die Anzahl der anzuzeigenden Datensätze, aber die Tabellenansicht wird nicht neu geladen. Hier finden Sie den Code für den Update Search Results Controller. UISearchController Funktioniert nicht

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 
    self.searchController.searchBar.delegate = self; 

    self.tableView.tableHeaderView = self.searchController.searchBar; 
    self.definesPresentationContext = YES; 

    _db=[[Database alloc]init]; 
    if(_vehicles==nil){ 
     _vehicles=[[NSMutableArray alloc]init]; 
    } 
    _vehicles=[_db getTheData:nil]; 
    NSLog(@"%lu",(unsigned long)_vehicles.count); 

} 

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController 
{ 
    NSString *searchText = searchController.searchBar.text; 
    NSMutableArray<Vehicle*> *searchResults = [[NSMutableArray<Vehicle*> alloc]init]; 
     for(Vehicle *v in self.vehicles){ 
      if([v.make containsString:searchText]){ 
       [searchResults addObject:v]; 
      } 
    } 
    NSLog(@"%lu",searchResults.count); 
    VehicleTableViewController *tableController = (VehicleTableViewController *)self.searchController.searchResultsController; 
    tableController.vehicles = searchResults; 
    [tableController.tableView reloadData]; 

} 
+0

searchResultsController ist null hier. Ich bin sicher, dass Sie nicht die richtige Referenz bekommen können. –

+0

Warum verwenden Sie [self.tableView reloadData] nicht, wenn es sich im selben View-Controller befindet? –

Antwort

0
VehicleTableViewController *tableController = (VehicleTableViewController *)self.searchController.searchResultsController; 

Diese Linie ist falsch, denke ich. searchResultsController ist nicht tableviectrler. Du kannst es nicht zwingen, eins zu sein. Sie haben bereits eine TableView-Referenz, verwenden Sie diese also.

[self.tableView reloadData]; 

Stellen Sie sicher, dass Sie die Tabellen-Datenquelle durch das searchresult ersetzen, bevor Sie die Tabelle erneut laden.

[dataSourceArr removeAllObjects]; 
[dataSourceArr = [NSMutableArray arrayWithArray: searchResults]; 
Verwandte Themen