Как я могу получить UITableView для перезагрузки (или, почему не работает reloadData)? - PullRequest
0 голосов
/ 30 августа 2011

У меня есть контроллер, где пользователь ищет местоположения, извлеченные из основного хранилища данных.Чтобы пользовательский интерфейс реагировал, я извлекаю идентификаторы объектов в фоновом потоке, например:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [self performSelectorInBackground:@selector(fetchLocationIDsForSearchTerm:)
                           withObject:searchText];
}

-(void) fetchLocationIDsForSearchTerm:(NSString *) searchTerm
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSManagedObjectContext *context = <a new context for this thread>        
    NSArray *locationIDs = <a CoreData query which returns object IDs>

    [self performSelectorOnMainThread:@selector(didFetchLocationIDs:) withObject:locationIDs waitUntilDone:YES];
    [context release];
    [pool release];
}

-(void) didFetchLocationIDs:(NSArray*) theLocationIDs
{   
    NSMutableArray *newLocations = [NSMutableArray array];

    for (NSManagedObjectID *objectID in theLocationIDs)
    {
        [newLocations addObject:[[self managedObjectContext] objectWithID:objectID]];
    }

    self.locations = newLocations;
    [[self mainTableView] reloadData];
}

... и затем извлекаю данные из self.locations в tableView:cellForRowAtIndexPath:.

Я ожидаю, что таблица обновится, когда вернутся результаты;но вместо этого, кажется, обновляется, когда пользователь вводит следующую букву своего поиска.Почему [[self mainTableView] reloadData] не перезагружает таблицу?

UPDATE

Я использую UISearchBar с SearchDisplayController.Если я удалю SearchDisplayController, проблема исчезнет.Есть ли какое-то свойство SearchDisplayController, которое я должен использовать вместо этого?

1 Ответ

3 голосов
/ 30 августа 2011

Поскольку у вас есть две таблицы.

Таблица 1 создана вами.

Таблица 2 создана контроллером отображения поиска и отображается над вашим представлением таблицы во время поиска,(Внимательно прочитайте раздел «Обзор» документации , в прошлом это приводило меня в замешательство из-за этой самой проблемы!)

Попробуйте изменить свою строку следующим образом:

[[[self searchDisplayController] searchResultsTableView] reloadData];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...