如何在折返时查看核心数据搜索结果FRC以查看?
问题描述:
我的核心数据搜索存在问题。加载后,我的整个表格都可见。好。我按下我的搜索按钮,输入一个术语,然后按搜索。显示正确的行。好。如何在折返时查看核心数据搜索结果FRC以查看?
问题是,当我退出表视图到我的*视图(多级表视图)并向下钻取到表。我之前过滤的搜索结果仍然显示。我如何让FRC从之前转储搜索谓词并在条目中显示所有记录?
这里是我的代码的相关部分:
- (void)viewDidLoad {
[super viewDidLoad];
if (managedObjectContext == nil) { managedObjectContext = [(RecipesAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; }
//search
UISearchDisplayController *searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:sBar contentsController:self];
[self performSelector:@selector(setSearchDisplayController:) withObject:searchDisplayController];
[searchDisplayController setDelegate:self];
[searchDisplayController setSearchResultsDataSource:self];
[searchDisplayController setSearchResultsDelegate:self];
[searchDisplayController release];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1);
}
self.filteredListContent = [NSMutableArray arrayWithCapacity:[[[self fetchedResultsController] fetchedObjects] count]];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
if (self.sBar.text !=nil)
{
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"name contains[cd] %@", self.sBar.text];
[fetchedResultsController.fetchRequest setPredicate:predicate];
}
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
[self.myTable reloadData];
[sBar resignFirstResponder];
}
- (NSFetchedResultsController *)fetchedResultsController {
// Set up the fetched results controller if needed.
if (fetchedResultsController == nil) {
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
//set batch size
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"name" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
}
return fetchedResultsController;
}
- (void)viewDidUnload {
self.filteredListContent = nil;
self.fetchedResultsController = nil;
}
- (void)dealloc {
self.filteredListContent = nil;
self.fetchedResultsController = nil;
[fetchedResultsController release];
[managedObjectContext release];
[filteredListContent release];
[myTable release];
[super dealloc];
}
感谢
UPDATE:知道了,谢谢。 我只是调用这个方法:
- (void)loadClean {
if(fetchedResultsController){
[fetchedResultsController release];
}
fetchedResultsController = nil;
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1);
}
[self.myTable reloadData];
}
答
您需要提供的FRC一个新的读取请求,并删除其缓存。如果你使用相同的提取请求,你会得到相同的回报。
即使我的缓存设置为零? – RyeMAC3 2011-06-16 00:38:33
当你说“新的”时,我不确定我是否跟着你? – RyeMAC3 2011-06-16 01:19:35