【问题标题】:How to ignore prefixes "A" and "The" when sorting using NSFetchedResultsController?使用 NSFetchedResultsController 排序时如何忽略前缀“A”和“The”?
【发布时间】:2012-01-20 21:18:52
【问题描述】:

我正在使用 CoreData 来保存保存在 SQLite 数据库中的书籍信息。按标题排序时,我想忽略“A”和“The”前缀。例如,当有书:“密码书”和“费马之谜”时,我希望“费马之谜”排在“密码书”之前,因为“The”应该被忽略。

除了添加一个不带前缀的标题的持久属性之外,我找不到任何方法来做到这一点。 (在上面的示例中,该属性说“titleNoPrefixes”应该包含“Code Book”字符串)。在 CoreData 中,基于计算的属性(又名瞬态属性)进行排序似乎是不可能的。

添加持久属性显然是一种糟糕的数据库设计,但我看不到另一种方法。有什么建议吗?

【问题讨论】:

    标签: iphone database ios4 sorting core-data


    【解决方案1】:

    约书亚,

    您的问题几乎与 Core Data 作为持久存储无关,这是对文本问题的一般数据库排序。解决问题的传统方法是使用普通表单字段作为排序类别。您可能希望将所有内容都小写并去掉该字段的干扰词。由于这些只是标题,因此在存储方面并不是特别昂贵。此外,这是插入时间操作而不是搜索时间操作。最后,瞬态变量只存在于 RAM 中。我相信它们在数据存储区中是 NULL 值。因此,对它们进行搜索毫无意义并引发异常。

    安德鲁

    【讨论】:

      【解决方案2】:

      您可以编写自己的 NSString 类别来实现:

      1. 创建删除文章的 NSString 副本(假设您要保留原始字符串)
      2. 比较从 #1 返回的字符串。

      【讨论】:

      • 我猜你的意思是 NSString 类别应该实现一个比较操作,比如(NSComparisonResult)ignorePrefixesCompare:(NSString *)string。对?如果这就是你的意思,我试过了,CoreData 忽略了它。原因在这里描述stackoverflow.com/questions/4789782/…
      • @Joshua 似乎要采用持久性属性,因为无法对 SQLite 存储上的瞬态数据进行排序。
      • 好吧,我想这些是没有别的办法了。感谢您的回复!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2016-01-25
      • 2011-03-16
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多