2011-02-09 3 views
2

Мой UISearchDisplayController выполняет асинхронные запросы через NSOperationQueue.Отображение результатов задерживается на 5 секунд в UISearchDisplayController

Однако таблица результатов не визуально обновляется до приблизительно 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; 
} 

Мой CustomerSearchOperation обновляет Tableview так:

- (void) main 
{ 
    // perform search 

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

ответ

4

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

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

- (void) main 
{ 
    // perform search 

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

 Смежные вопросы

  • Нет связанных вопросов^_^