使用 NSFetchedResultsController 排序时如何忽略前缀“A”和“The”?
Posted
技术标签:
【中文标题】使用 NSFetchedResultsController 排序时如何忽略前缀“A”和“The”?【英文标题】:How to ignore prefixes "A" and "The" when sorting using NSFetchedResultsController? 【发布时间】:2012-01-20 21:18:52 【问题描述】:我正在使用 CoreData 来保存保存在 SQLite 数据库中的书籍信息。按标题排序时,我想忽略“A”和“The”前缀。例如,当有书:“密码书”和“费马之谜”时,我希望“费马之谜”排在“密码书”之前,因为“The”应该被忽略。
除了添加一个不带前缀的标题的持久属性之外,我找不到任何方法来做到这一点。 (在上面的示例中,该属性说“titleNoPrefixes”应该包含“Code Book”字符串)。在 CoreData 中,基于计算的属性(又名瞬态属性)进行排序似乎是不可能的。
添加持久属性显然是一种糟糕的数据库设计,但我看不到另一种方法。有什么建议吗?
【问题讨论】:
【参考方案1】:约书亚,
您的问题几乎与 Core Data 作为持久存储无关,这是对文本问题的一般数据库排序。解决问题的传统方法是使用普通表单字段作为排序类别。您可能希望将所有内容都小写并去掉该字段的干扰词。由于这些只是标题,因此在存储方面并不是特别昂贵。此外,这是插入时间操作而不是搜索时间操作。最后,瞬态变量只存在于 RAM 中。我相信它们在数据存储区中是 NULL 值。因此,对它们进行搜索毫无意义并引发异常。
安德鲁
【讨论】:
【参考方案2】:您可以编写自己的 NSString 类别来实现:
-
创建删除文章的 NSString 副本(假设您要保留原始字符串)
比较从 #1 返回的字符串。
【讨论】:
我猜你的意思是 NSString 类别应该实现一个比较操作,比如(NSComparisonResult)ignorePrefixesCompare:(NSString *)string。对?如果这就是你的意思,我试过了,CoreData 忽略了它。原因在这里描述***.com/questions/4789782/… @Joshua 似乎要采用持久性属性,因为无法对 SQLite 存储上的瞬态数据进行排序。 好吧,我想这些是没有别的办法了。感谢您的回复!以上是关于使用 NSFetchedResultsController 排序时如何忽略前缀“A”和“The”?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中难以配置 NSFetchedResultsController