【问题标题】:Core Data creating NSPredicate for NSNumber using something akin to BEGINSWITHCore Data 使用类似于 BEGINSWITH 的东西为 NSNumber 创建 NSPredicate
【发布时间】:2011-10-11 18:19:30
【问题描述】:

我正在尝试从 Core Data 中的 NSNumber 属性上的搜索栏文本中检索结果。 特别是,从搜索文本中获取 ID 号为“BEGINSWITH”的商店中的对象。

例如,如果用户在搜索框中输入数字“1”,我的抓取请求返回的对象包括1、12、14、19、100、149、1324等。

不幸的是,我也是在表上实现排序,所以当按这个id号排序时,如果在数据模型中表示为字符串,排序变成:1,10,100,2,20,200而不是1,2,10 ,20,100,200。

我怎样才能在这里两全其美,以便我可以按字符串排序方式进行搜索,但按数字排序方式进行排序? 我是否必须在数据模型中创建两个属性,一个字符串和一个数字表示相同的数据?

任何帮助将不胜感激。

Rgds, 费利佩

【问题讨论】:

  • 我自己解决了问题。我没有将搜索字符串转换为 int 并使用 BEGINSWITH 和左侧的 id 号和右侧的搜索 int,而是能够使用 BEGINSWITH 和左侧的 id 号和右侧的搜索字符串。搜索和排序都很好用。
  • 您应该将其发布为答案并接受它。
  • 原来这并没有解决我的问题...我仍然无法使用 BEGINSWITH 对 NSNumbers 进行排序。

标签: objective-c ios core-data nspredicate nsfetchedresultscontroller


【解决方案1】:

我建议你有两个字段,实际标识符是一个数字,然后是一个 searchIdentifier,它是一个字符串。搜索字符串,按数字排序。

【讨论】:

    【解决方案2】:

    虽然苹果文档中没有提到它,但 Like 也适用于 nsnumber。

    例如,

    [NSPredicate predicateWithFormat:@"numberField like '%@*'", searchTerm]
    

    works,其中 numberField 是 NSNumber 类型的核心数据属性。这会获取所有 numberfield 值以 searchTerm 开头的记录。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      相关资源
      最近更新 更多