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 从 PHFetchResults 中排除慢动作视频