排序CoreData NSFetchRequest首先完全匹配

时间:2016-02-02 11:05:45

标签: core-data nsfetchrequest

我正在通过带有BEGINSWITH谓词的属性搜索CoreData实体。现在我想按相关性对结果进行排序,以便首先显示直接匹配。

搜索字符串示例:

"star"

结果列表:

"star" # <- exact match should be first
"starship"
"stargazer"

我有一个像这样的CoreData获取请求:

NSString *stringFromSearchField;
NSFetchRequest *fr =[NSFetchRequest fetchRequestWithEntityName:@"SearchWord"];
fr.predicate = [NSPredicate predicateWithFormat:@"(word beginswith %@)", stringFromSearchField];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Exact matches first, please..." ascending:YES];
fr.sortDescriptors = @[sortDescriptor];

我知道我可以将NSFetchedResultsController中的结果复制到一个可变数组中并在代码中排序,但我想尽可能避免这种情况。

那么有什么方法可以存档吗?也许数据模型中的一些聪明的变化或谓词技巧?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来做到这一点。我在这里找到了一个提示:https://stackoverflow.com/a/31316010/921573

诀窍是按长度排序。完全匹配必然具有最小长度值 所以我的排序描述符如下所示:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"word.length"
                                                     ascending:YES];