NSPredicate用于简单的fetchRequest

时间:2013-10-04 03:17:42

标签: ios core-data

我正在使用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,其中有一些我在搜索时试图显示的值,但它总是空的。有什么我想念的吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 我不确定=运算符是否与[c]一起使用。请尝试使用like代替:

    [NSPredicate predicateWithFormat:@"previousSearch like[c] %@", searchText];
    
  2. 此外,您可能希望搜索不相同的结果,但搜索包含(或以其开头)文本的结果。在这种情况下,您可以使用containsbeginswith

    [NSPredicate predicateWithFormat:@"previousSearch contains[c] %@", searchText];
    [NSPredicate predicateWithFormat:@"previousSearch beginswith[c] %@", searchText];