如何重新加载UITableView(或者,为什么reloadData不工作)?

时间:2011-08-30 15:36:22

标签: iphone uitableview

我有一个控制器,用户可以在其中搜索从Core Data商店中提取的位置。为了保持UI响应,我在后台线程上获取对象ID,如下所示:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [self performSelectorInBackground:@selector(fetchLocationIDsForSearchTerm:)
                           withObject:searchText];
}

-(void) fetchLocationIDsForSearchTerm:(NSString *) searchTerm
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSManagedObjectContext *context = <a new context for this thread>        
    NSArray *locationIDs = <a CoreData query which returns object IDs>

    [self performSelectorOnMainThread:@selector(didFetchLocationIDs:) withObject:locationIDs waitUntilDone:YES];
    [context release];
    [pool release];
}

-(void) didFetchLocationIDs:(NSArray*) theLocationIDs
{   
    NSMutableArray *newLocations = [NSMutableArray array];

    for (NSManagedObjectID *objectID in theLocationIDs)
    {
        [newLocations addObject:[[self managedObjectContext] objectWithID:objectID]];
    }

    self.locations = newLocations;
    [[self mainTableView] reloadData];
}

...然后我从tableView:cellForRowAtIndexPath:中的self.locations中提取数据。

我希望在结果回来时表格会更新;但相反,它似乎在用户输入搜索的下一个字母时更新。为什么不[[self mainTableView] reloadData]重新加载表?

更新

我正在使用带有SearchDisplayController的UISearchBar。如果我删除SearchDisplayController,问题就会消失。我应该使用SearchDisplayController的一些属性吗?

1 个答案:

答案 0 :(得分:3)

因为你有两张桌子。

表1由您创建。

表2由搜索显示控制器创建,并在搜索过程中显示在表格视图上方。 (仔细阅读the documentation的概述部分,这个问题在过去使我绊倒!)

尝试将您的行更改为:

[[[self searchDisplayController] searchResultsTableView] reloadData];