当我使用HTTP API进行搜索时,我应该如何重新加载searchResults表视图?

时间:2014-08-14 14:10:26

标签: ios objective-c

我有这些方法,并尝试刷新此表视图,当我收到服务器的响应时,但结果表不会重新加载。

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:[self.searchDisplayController.searchBar
                                                     selectedScopeButtonIndex]]];
    return NO;
}

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSMutableString *webString = [[NSMutableString alloc] initWithFormat: @"http://dsadda.ru/common/actions/catalog.php?scode=kLg2sij45uJhj&text=%@", searchText];
    webString = [[webString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding] mutableCopy];

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration: config];
    NSURLSessionTask *task = [session dataTaskWithURL: [NSURL URLWithString: webString] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                              {
                                  NSDictionary *answer = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil];

                                  firmsList = [[NSMutableArray alloc] initWithArray:[answer objectForKey:@"FirmsList"]];

                                  [[_searchController searchResultsTableView] reloadData];
                              }];
    [task resume];
}

所以当我收到服务器的响应时,请告诉我如何重新加载这个tableView。

2 个答案:

答案 0 :(得分:1)

这个问题太傻了。我忘了NSURLConnection在后台工作,我应该使用主线程重新加载表视图。

答案 1 :(得分:0)

每当您收到服务器的响应时,在完成处理程序的末尾只放[yourtableview reloadData]

如果这对您不起作用,则很可能是您的表视图委托方法存在问题。

检查这些委托方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

确保你的'公司列表'数组嵌入到这些委托方法中,这样当你调用[yourtableview reloadData]时,新填充的'公司列表'数组就是表从中提取数据的内容。