在Cloudkit谓词上使用OR运算符

时间:2016-05-18 23:41:03

标签: swift predicate cloudkit

我有一个包含5个字段的cloudkit记录:

Active
User1
User2
User3
User4

我正在尝试选择4个用户字段中的一个与userID变量匹配的记录。

4个用户字段中只有一个与userID变量匹配。

这是我正在使用的代码:

var userID = "0984093843897"

predicate = NSPredicate(format: "userID1 = %@ OR userID2 = %@ OR userID3 = %@ OR userID4 = %@ AND active = %@", userID, userID, userID, userID, true)

基本上我想要实现的是类似于下面的陈述:

if userID1 == userID || userID2 == userID || userID3 == userID || userID4 == userID && active = true

不幸的是,cloudkit正在为谓词格式返回错误。我不确定我在这里尝试做什么是可以通过cloudkit谓词实现的,或者是否有更好的方法可以实现。

我在堆栈上找到的大多数示例都使用AND运算符处理谓词,不知道如何使用OR运算符。看Apple文档它不存在,所以不确定是否有解决方法。

1 个答案:

答案 0 :(得分:1)

Cloud Kit' CKQuery在谓词中不支持OR。请参阅CKQuery的文档。它显示了所有受支持的谓词运算符,虽然支持ANDNOT,但OR不支持。

OR的一个可能替代是IN。我只看到了你希望看到单个字段是否包含多个值之一的地方。但你的情况正好相反。请尝试以下操作,但可能无效。

var userID = "0984093843897"
NSPredicate(format:"%@ IN { %K, %K, %K, %K } AND active = true", userID, "userID1", "userID2", "userID3", "userID4"]