我正在使用Core Data将以前的搜索保存在SearchBar中。我的实体很简单,只有属性:
previousSearch (NSString)
当用户在搜索栏中输入内容时,我想在数据库中搜索我之前的搜索。我一直得到0结果。
以下是从Core Data检索数据的代码。
- (void)filterContentForSearchText:(NSString *)searchText {
[self.filteredLastSearches removeAllObjects];
NSEntityDescription *search = [NSEntityDescription entityForName:@"Search" inManagedObjectContext:_managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:search];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"previousSearch=[c]%@", searchText];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error) {
NSLog(@"Error filtering search: %@", [error description]);
}
_filteredLastSearches = [NSMutableArray arrayWithArray:fetchedObjects];
}
fetchedObjects总是空的,我不知道为什么。我可以在数据库中看到db实际上有ZPREVIOUSSEARCH,其中有一些我在搜索时试图显示的值,但它总是空的。有什么我想念的吗?提前谢谢。
答案 0 :(得分:0)
我不确定=
运算符是否与[c]
一起使用。请尝试使用like
代替:
[NSPredicate predicateWithFormat:@"previousSearch like[c] %@", searchText];
此外,您可能希望搜索不相同的结果,但搜索包含(或以其开头)文本的结果。在这种情况下,您可以使用contains
或beginswith
。
[NSPredicate predicateWithFormat:@"previousSearch contains[c] %@", searchText];
[NSPredicate predicateWithFormat:@"previousSearch beginswith[c] %@", searchText];