0

我正在使用 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 以及我在搜索时尝试显示的几个值,但它总是空的。有什么我想念的吗?提前致谢。

4

1 回答 1

0
  1. 我不确定=操作员是否与[c]. 尝试like改用:

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

    [NSPredicate predicateWithFormat:@"previousSearch contains[c] %@", searchText];
    [NSPredicate predicateWithFormat:@"previousSearch beginswith[c] %@", searchText];
    
于 2013-10-04T05:53:59.687 回答