首先对 CoreData NSFetchRequest 完全匹配进行排序
Posted
技术标签:
【中文标题】首先对 CoreData NSFetchRequest 完全匹配进行排序【英文标题】:Sort CoreData NSFetchRequest exact matches first 【发布时间】:2016-02-02 11:05:44 【问题描述】:我正在通过带有 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 中的结果复制到一个可变数组中并在代码中排序,但如果可能的话,我想避免这种情况。
那么有什么办法可以存档吗?也许是数据模型或谓词技巧中的一些巧妙更改?
【问题讨论】:
我认为按长度排序应该可行。类似"word.length"
好的,那么当你尝试这样做时发生了什么?
它不是那样工作的。我稍后会调查,也许这只是语法。最坏的情况是我必须创建一个存储长度的列。
好的,所以它确实适用于我的情况。精确匹配是第一位的。我将汇总我自己的问题的答案。
【参考方案1】:
我已经找到了一种方法来做到这一点。我在这里找到了提示:https://***.com/a/31316010/921573
诀窍是按长度排序。精确匹配必然具有最小的长度值。 所以我的排序描述符看起来像这样:
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"word.length"
ascending:YES];
【讨论】:
以上是关于首先对 CoreData NSFetchRequest 完全匹配进行排序的主要内容,如果未能解决你的问题,请参考以下文章
首先对 CoreData NSFetchRequest 完全匹配进行排序
CoreData(iOS):是不是需要创建数据库才能使用CoreData?coredata可以对简单的平面文件进行操作吗? [关闭]