OGeek|极客世界-中国程序员成长平台

标题: ios - UISearchDisplayController 中结果显示延迟 5s [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:58
标题: ios - UISearchDisplayController 中结果显示延迟 5s

我的 UISearchDisplayController 通过 NSOperationQueue 执行异步搜索。

但是,在 NSOperation 调用 [searchDisplayController.searchResultsTableView reloadData] 大约 5 秒后,结果表才会在视觉上更新。

- (BOOL) searchDisplayControllerUISearchDisplayController*)controller shouldReloadTableForSearchStringNSString*)searchString
{
    [searchQueue cancelAllOperations];
    NSInvocationOperation *op = [[[CustomSearchOperation alloc] initWithController:controller searchTerm:searchString] autorelease];
    [searchQueue addOperationp];

    return NO;
}

我的 CustomerSearchOperation 像这样更新 tableView:

- (void) main
{
    // perform search

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



Best Answer-推荐答案


问题是 UI 更新必须发生在主线程上,并且 reloadData 是通过 NSOperationQueue 从后台线程调用的。

你可以使用NSObject方法performSelectorOnMainThread:withObject:waitUntilDone:以确保此类更新发生在主线程上。

- (void) main
{
    // perform search

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

关于ios - UISearchDisplayController 中结果显示延迟 5s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942718/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4