У меня есть контроллер, где пользователь ищет местоположения, извлеченные из основного хранилища данных.Чтобы пользовательский интерфейс реагировал, я извлекаю идентификаторы объектов в фоновом потоке, например:
-(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, которое я должен использовать вместо этого?