2016-12-04 59 views
1

我想在TableViewController中實現一個UISearchController。當我在搜索欄中輸入文本後,我在控制檯中獲取了要顯示多少條記錄的計數,但是tableview沒有重新加載。請查找更新搜索結果控制器的代碼。UISearchController不工作

- (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在這裏爲零。所以我相信你無法得到正確的參考。 –

+0

爲什麼不使用[self.tableView reloadData]如果它在同一個視圖控制器內? –

回答

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

此行是錯誤的,我認爲。 searchResultsController不是tableviewctrler。你不能強迫它成爲一個。你已經有了tableView引用,所以使用它。

[self.tableView reloadData]; 

確保在重新加載表之前用searchresult替換Table數據源。

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