【问题标题】:NSPredicate not filtering correctlyNSPredicate 没有正确过滤
【发布时间】: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

标签: iphone ios nsstring nspredicate nsfetchrequest


【解决方案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 否 - 这是一个有效的谓词。请参阅示例项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多