【问题标题】:Using modulo operator in NSPredicate doesn't work在 NSPredicate 中使用模运算符不起作用
【发布时间】:2018-02-21 13:30:21
【问题描述】:

在使用 Core Data 时,我需要从一个实体中选择一些记录,在两个固定排名之间,并且排名等于某个模 128 的值。

为此,我尝试使用我首先想到的东西,即使用如下谓词:

let predicate = NSPredicate(format: "(rank >= 17) AND (rank <= 12319) AND ((rank % 128) == 29)")

但这不起作用。运行程序时,我收到如下错误消息。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(rank >= 17) AND (rank <= 12319) AND ((rank % 128) == 29)"'

认为百分号(模)可能会造成麻烦我将其更改为 %%,但它是一样的。

我知道与模检查相关的部分是导致问题的部分。

怎么走?

【问题讨论】:

  • 好的,谢谢。这实际上正是我正在做的事情,同时希望得到一个更简单的答案,但正如你所提到的,这似乎是要走的路。届时我将继续朝这个方向进行调查。

标签: ios core-data swift3 nspredicate


【解决方案1】:

链接的答案说明了您将如何执行此操作。至于为什么你需要这样做,因为NSPredicate格式字符串是字符串匹配和少量数学比较的组合,但不直接支持执行计算 作为谓词的一部分。所以你的 &gt;=&lt;= 比较很好,但不直接支持模数。 NSExpression 更复杂,但扩展了功能以包含更多选项。

您可能会发现查看 Apple 的 Predicate Programming Guide 以了解更多详情很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2018-02-26
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多