我有一个控制器,用户可以在其中搜索从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的一些属性吗?
答案 0 :(得分:3)
因为你有两张桌子。
表1由您创建。
表2由搜索显示控制器创建,并在搜索过程中显示在表格视图上方。 (仔细阅读the documentation的概述部分,这个问题在过去使我绊倒!)
尝试将您的行更改为:
[[[self searchDisplayController] searchResultsTableView] reloadData];