NSPredicate 没有正确过滤

Posted

技术标签:

【中文标题】NSPredicate 没有正确过滤【英文标题】:NSPredicate not filtering correctly 【发布时间】:2011-08-12 22:49:50 【问题描述】:

我正在尝试设置一个 NSPredicate 来过滤数据。

我有一个名为 code 的实体的属性,其格式类似于 55.534

我正在尝试获取某个范围内的所有数据,例如 50-60。 我有这个,但它不起作用。

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"ANY code BETWEEN %@", [NSArray arrayWithObjects:self.predicateFilterStart, self.predicateFilterEnd, nil]];

【问题讨论】:

你的意思是它不起作用?你有编译错误吗?返回的结果是否不正确? 是的,它没有返回任何东西。 你是如何使用这个谓词的? 使用 FetchRequest,其他一切都正常。很明显为什么这不起作用,我只是不知道如何解决它。 code 通常是字符串,格式类似于 55.234 您的谓词似乎没问题。我做了一个小例子项目,显示它工作dl.dropbox.com/u/585261/PredicateTest.zip 【参考方案1】:

首先,您的 SQL 语法是错误的。你的谓词格式应该是

ANY code BETWEEN x AND y

其次,当您传递 NSArray 时,%@ 格式化程序应该接收 NSString。

试试这个:

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"ANY code BETWEEN %@ AND %@", self.predicateFilterStart, self.predicateFilterEnd];

【讨论】:

我认为这行不通。因为 SDK 会知道 55.656 字符串在字符串 50 和字符串 60 之间吗?如果代码是 64.345,我不需要告诉它只搜索前 2 个索引吗? 也遇到了这个崩溃*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "ANY code BETWEEN %@ AND %@"' *** @Kashiv 否 - 这是一个有效的谓词。请参阅示例项目。

以上是关于NSPredicate 没有正确过滤的主要内容,如果未能解决你的问题,请参考以下文章

如何制作正确过滤本地字符的 NSPredicate?

Swift CoreData NSPredicate

NSPredicate 从 PHFetchResults 中排除慢动作视频

使用 NSPredicate 过滤 - 数据类型?

出于某种原因,NSPredicate 没有过滤我的 UITableView?

AND NSPedicate 关于核心数据关系