为什么nspredicate不工作
- (NSFetchedResultsController *)fetchedResultsController { if (_fetchedResultsController != nil) { return _fetchedResultsController; } NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"KeyRefEntity" inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; [fetchRequest setFetchBatchSize:20]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time" ascending:NO]; NSArray *sortDescriptors = @[sortDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"time" cacheName:@"Master"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = aFetchedResultsController; NSError *error = nil; if (![self.fetchedResultsController performFetch:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return _fetchedResultsController; }
- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar { if (self.searchBar.text !=nil) { NSPredicate *predicate =[NSPredicate predicateWithFormat:@"ref CONTAINS[cd] %@", self.searchBar.text]; [self.fetchedResultsController.fetchRequest setPredicate:predicate]; } else { NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"]; [self.fetchedResultsController.fetchRequest setPredicate:predicate]; } NSError *error = nil; if (![[self fetchedResultsController] performFetch:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); exit(-1); } [self.searchBar resignFirstResponder]; [self.tableView reloadData]; }
我试图search使用此代码,但searchBarSearchButtonClicked:
内的searchBarSearchButtonClicked:
不工作我放置一个断点所有代码执行,但没有任何反应。
不知道是什么[NSPredicate predicateWithFormat:@"All"];
应该这样做,但它不太可能工作。 当您的search文本更改时,应更换提取请求并将新的提取请求添加到FRC。 从FRC文档:
initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:
重要提示:调用此方法后,您不得修改fetchRequest。 例如,你不能改变它的谓词或sorting顺序。
您的其他问题是FRC正在使用caching。 不支持在使用caching时更改提取请求。 一般的build议是不使用caching。 如果由于某种原因必须使用caching,那么在(更改)获取请求之前,还需要删除旧的caching- deleteCacheWithName:)
。
请参阅此处的FRC文档。
- 核心数据整数变化值?
- NSManagedObjectContext的performBlockAndWait:不在接收者的队列上执行
- 如何使用MagicalRecord设置Core Data轻量级迁移?
- 核心数据设置XCode中的一对多4.3.1
- 在删除coredata中的对象后,按照通知重新加载tableview显示奇怪的结果
- 如果核心数据设置为相同的值,核心数据是否将其视为已更改的值?
- 在创build新对象时查询特定属性的核心数据,如果存在,则返回该对象;如果不存在,则创build一个新的对象
- CoreData:使用NSDictionaryResultType提取多对多关系的计数
- coredata keypath nameOfMovie找不到实体<NSSQLEntity Theaters id = 3>