Harish
Harish

Reputation: 613

UISearchController Not working

I am trying to implement a UISearchController in a TableViewController. After i enter the text in the search bar I am getting the count in the console of how many records to display but the tableview is not getting reloaded. Please find the code for the Update Search Results Controller.

- (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];

}

Upvotes: 1

Views: 427

Answers (1)

GeneCode
GeneCode

Reputation: 7588

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

This line is wrong I think. searchResultsController is not tableviewctrler. You cannot force it to be one. You already have tableView reference so use that.

[self.tableView reloadData];

Make sure you replace the Table datasource with the searchresult before reloading the table.

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

Upvotes: 0

Related Questions