使用核心数据时,我需要从一个实体中选择一些记录,在两个固定的等级之间,等级等于一个模数为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)"'
认为百分号(模数)可能导致问题我将其更改为%%,但它是相同的。
我知道与模数检查相关的部分是造成问题的部分。
要走的路是什么?
答案 0 :(得分:0)
链接的答案解释了您是如何做到这一点的。至于为什么你需要这样做,因为NSPredicate
格式字符串是字符串匹配与少量数学比较的组合,但不要直接支持执行计算作为谓词的一部分。因此,您的>=
和<=
比较很好,但不直接支持模数。 NSExpression
更复杂,但扩展了功能以包含更多选项。
您可能会发现查看Apple的Predicate Programming Guide以获取更多详细信息非常有用。