首先对 CoreData NSFetchRequest 完全匹配进行排序

Sort CoreData NSFetchRequest exact matches first

我正在通过具有 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 的结果复制到可变数组中并在代码中排序,但我想尽可能避免这种情况。

有什么办法可以存档吗?也许数据模型或谓词技巧有一些巧妙的改变?

我想出了一个方法来做到这一点。我在这里找到了提示:

诀窍是按长度排序。精确匹配必然有最小的长度值。
所以我的排序描述符看起来像这样:

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