Iphone 如何获取要重新加载的UITableView(或者,为什么重新加载数据不起作用)?

Iphone 如何获取要重新加载的UITableView(或者,为什么重新加载数据不起作用)?,iphone,uitableview,Iphone,Uitableview,我有一个控制器,用户在其中搜索从核心数据存储中提取的位置。为了保持UI的响应性,我在后台线程上获取对象ID,如下所示: -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [self performSelectorInBackground:@selector(fetchLocationIDsForSearchTerm:) wi

我有一个控制器,用户在其中搜索从核心数据存储中提取的位置。为了保持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];
}
-(无效)搜索栏:(UISearchBar*)搜索栏文本更改:(NSString*)搜索文本
{
[self-performSelectorInBackground:@selector(fetchLocationIDsForSearchTerm:)
withObject:searchText];
}
-(void)fetchLocationIDsForSearchTerm:(NSString*)searchTerm
{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
NSManagedObjectContext*上下文=
NSArray*位置ID=
[self-performSelectorOnMainThread:@selector(DidFetchLocationId:)with-Object:locationIDs waitUntilDone:YES];
[上下文释放];
[池释放];
}
-(void)didFetchLocationId:(NSArray*)位置ID
{   
NSMutableArray*新位置=[NSMutableArray];
for(位置ID中的NSManagedObjectID*objectID)
{
[newLocations添加对象:[[self-managedObjectContext]objectWithID:objectID]];
}
self.locations=新地点;
[[self mainTableView]重新加载数据];
}
…然后我从
tableView:cellforrowatinexpath:
中的self.locations中取出数据

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

更新


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

因为您有两个表

表1由您创建

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

尝试将您的线路更改为:

[[[self searchDisplayController] searchResultsTableView] reloadData];

因为你有两张桌子

表1由您创建

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

尝试将您的线路更改为:

[[[self searchDisplayController] searchResultsTableView] reloadData];

运行此操作时发生了什么?你能详细说明你看到的错误吗?我键入“Lee”并返回以“Le”开头的位置。然后我再键入一个d,然后返回以“Lee”开头的位置。这只是一个想法,因为这以前也发生在我身上。您真的确定mainTableView实际上是通过XIB或在代码中链接到UITableView的吗?运行此操作时发生了什么?你能详细说明你看到的错误吗?我键入“Lee”并返回以“Le”开头的位置。然后我再键入一个d,然后返回以“Lee”开头的位置。这只是一个想法,因为这以前也发生在我身上。您真的确定mainTableView实际上是通过XIB或代码链接到UITableView的吗?