Core Data 使用类似于 BEGINSWITH 的东西为 NSNumber 创建 NSPredicate

Posted

技术标签:

【中文标题】Core Data 使用类似于 BEGINSWITH 的东西为 NSNumber 创建 NSPredicate【英文标题】:Core Data creating NSPredicate for NSNumber using something akin to BEGINSWITH 【发布时间】: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 进行排序。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

例如,

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

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

【讨论】:

以上是关于Core Data 使用类似于 BEGINSWITH 的东西为 NSNumber 创建 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 MagicalRecord/Core Data 进行类似 UNION 的查询

Core Data-备用

Core Data基础

将 Core Data 与图像或按钮(或除了 tableView 之外的任何东西)一起使用

NSPredicate Core Data iOS 中的子查询

Core Data浅谈初级入门