0

Попытка реализовать UISearchController в моем приложении с использованием Parse.com для запроса. Есть несколько примеров онлайн, но для более старого «UISearchDisplayController», который теперь устарел.UISearchController не обновляется с помощью PFQueryTableView

В любом случае, похоже, что все работает правильно, что касается поиска и запросов (согласно моему NSLog), но tableview не обновляется вообще, и я не уверен, почему.

Вот что я сделал:

@interface LocalSalesViewController() <UISearchResultsUpdating, UISearchControllerDelegate> 


@property (nonatomic, strong) UISearchController *searchController; 
@property (nonatomic, strong) NSMutableArray *searchResults; // Filtered search results 

@end 

@implementation LocalSalesViewController 
- (id)initWithCoder:(NSCoder *)aCoder { 
    self = [super initWithCoder:aCoder]; 
    if (self) { 
     self.parseClassName = @"Sales"; 
     self.pullToRefreshEnabled = YES; 
     self.paginationEnabled = YES; 
     self.objectsPerPage = 25; 
    } 
    return self; 
} 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.searchResults = [NSMutableArray array]; 
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.delegate = self; 
    self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0); 
    self.tableView.tableHeaderView = self.searchController.searchBar; 
    self.definesPresentationContext = YES; 

} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    LocalSalesTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    if (cell == nil) 
    { 
     cell = [[LocalSalesTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    } 

     object = (tableView == self.tableView) ? self.objects[indexPath.row] : self.searchResults[indexPath.row]; 

     cell.saleTitle.text = [object objectForKey:@"name"]; 

    return cell; 


} 



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == self.tableView) { 


     return self.objects.count; 

    } else { 

     return self.searchResults.count; 

    } 
} 


#pragma mark - UISearchResultsUpdating 
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController { 
    NSString *searchString = [self.searchController.searchBar text]; 
    [self updateFilteredContentForSaleName:searchString]; 
    [((UITableViewController *)self.searchController.searchResultsController).tableView reloadData]; 
} 
#pragma mark - Content Filtering 
- (void)updateFilteredContentForSaleName:(NSString *)saleName { 
    [self.searchResults removeAllObjects]; 

    for (PFObject *sale in self.objects) 
    { 
     NSString *saleTitle = [sale objectForKey:@"name"]; 
     if ([[saleTitle lowercaseString] hasPrefix:[saleName lowercaseString]]) 
     { 
      [self.searchResults addObject:sale]; 
     } 
    } 
    NSLog(@"%@", self.searchResults); 

} 

Оказывается, что self.searchResults лог делает все его воображаемое, чтобы путем фильтрации те, и добавление в массив, но клетки не обновляется в все, что так было.

ответ

0

AFAIK, вызывающий initWithSearchResultsController:nil означает, что «я» будет контроллером вида, используемым для отображения результатов.

Так ((UITableViewController *)self.searchController.searchResultsController).tableView является self.tableView

Так if (tableView == self.tableView) всегда будет true.