2011-02-09 62 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]; 
} 
相關問題