2

MyUISearchDisplayControllerはを介して非同期検索を実行しますNSOperationQueue

NSOperationただし、結果テーブルは、呼び出し後約5秒まで視覚的に更新されません[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

1 に答える 1

4

問題は、UIの更新がメインスレッドで行われる必要がありreloadData、バックグラウンドスレッドから。を介して呼び出されていることNSOperationQueueです。

NSObjectメソッドperformSelectorOnMainThread:withObject:waitUntilDone:を使用して、このような更新がメインスレッドで確実に行われるようにすることができます。

- (void) main
{
    // perform search

    [sdc setContents:results];
    [sdc.searchResultsTableView performSelectorOnMainThread:@selector(reloadData)
                                withObject:nil
                                waitUntilDone:NO];
}
于 2011-02-09T14:49:11.630 に答える