【发布时间】:2011-10-16 02:45:11
【问题描述】:
花了几个小时后,我从下面的文章中发现无法在 SQLite 支持的 NSFetchedResultsController 中进行自定义排序。
NSFetchedResultsController custom sort not getting called
但是,我找不到我的问题的实际解决方案。
这就是我想要做的。
背景:
我在 CoreData 中有一个英语词典数据库(只是一个简单的单词列表 - 非常大)。单词在 UITableView 中使用 NSFetchedResultsController 显示。
UITableView 有一个关联的搜索栏。当用户在搜索栏中输入字符串时,UITableView 会显示过滤后的单词列表。
为什么需要自定义排序:
当用户输入一个字符串时,假设它是bre,我将其更改为正则表达式b.*r.*e.*,并将其用作NSPredicate,然后执行performFetch。这样所有像“bare”和“break”这样的词都会显示在表格视图中。
默认情况下,单词按字母顺序显示。因此,bare 将出现在 break 之前。
我希望break 在搜索列表中排在bare 之前,因为break 的前三个字符与用户输入的内容完全匹配。
可能的想法:
- 将 NSFetchedResultsController 的结果复制到 NSArray 并进行自定义排序。 我不确定 NSArray 对像英语词典这样的大型数组的工作速度有多快。
- 多次尝试 performFetch。例如上面,按顺序对
bre.*、br.+e.*、b.+r.+e.*尝试 performFetch 并将它们组合起来。
这两个想法看起来都不是很整洁。
如果您能针对此类问题提出任何已知的简洁且典型的解决方案,我将不胜感激。
【问题讨论】:
标签: iphone sorting nsfetchedresultscontroller nssortdescriptor