在NSPredicate中使用模运算符不起作用

时间:2017-09-13 01:05:49

标签: ios core-data swift3 nspredicate

使用核心数据时,我需要从一个实体中选择一些记录,在两个固定的等级之间,等级等于一个模数为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)"'

认为百分号(模数)可能导致问题我将其更改为%%,但它是相同的。

我知道与模数检查相关的部分是造成问题的部分。

要走的路是什么?

1 个答案:

答案 0 :(得分:0)

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

您可能会发现查看Apple的Predicate Programming Guide以获取更多详细信息非常有用。