2011-02-09 53 views
2

UISearchDisplayController执行异步搜索经由NSOperationQueue延迟。通过5S在UISearchDisplayController

但是,结果表不会直观地更新,直到NSOperation调用[searchDisplayController.searchResultsTableView reloadData]后约5秒。

- (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后台线程调用。

可以使用NSObject方法performSelectorOnMainThread:withObject:waitUntilDone:,以确保在主线程上发生这样的更新。

- (void) main 
{ 
    // perform search 

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