Отображение результатов задерживается на 5 секунд в UISearchDisplayController - PullRequest
2 голосов
/ 09 февраля 2011

My UISearchDisplayController выполняет асинхронный поиск с помощью NSOperationQueue.

Однако таблица результатов не обновляется визуально до примерно 5 секунд после NSOperation вызовов [searchDisplayController.searchResultsTableView reloadData].

- (BOOL) searchDisplayController:(UISearchDisplayController*)controller shouldReloadTableForSearchString:(NSString*)searchString
{
    [searchQueue cancelAllOperations];
    NSInvocationOperation *op = [[[CustomSearchOperation alloc] initWithController:controller searchTerm:searchString] autorelease];
    [searchQueue addOperation:op];

    return NO;
}

My CustomerSearchOperation обновляет tableView следующим образом:

- (void) main
{
    // perform search

    [searchDisplayController setContents:results];
    [searchDisplayController.searchResultsTableView reloadData];
}

1 Ответ

4 голосов
/ 09 февраля 2011

Проблема в том, что обновления пользовательского интерфейса должны происходить в основном потоке, а reloadData вызывается из фонового потока через NSOperationQueue.

Вы можете использовать метод NSObject executeSelectorOnMainThread: withObject: waitUntilDone: , чтобы такие обновления происходили в основном потоке.

- (void) main
{
    // perform search

    [sdc setContents:results];
    [sdc.searchResultsTableView performSelectorOnMainThread:@selector(reloadData)
                                withObject:nil
                                waitUntilDone:NO];
}
...