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 与图像或按钮(或除了 tableView 之外的任何东西)一起使用