我有一个包含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文档它不存在,所以不确定是否有解决方法。
答案 0 :(得分:1)
Cloud Kit' CKQuery
在谓词中不支持OR
。请参阅CKQuery
的文档。它显示了所有受支持的谓词运算符,虽然支持AND
和NOT
,但OR
不支持。
OR
的一个可能替代是IN
。我只看到了你希望看到单个字段是否包含多个值之一的地方。但你的情况正好相反。请尝试以下操作,但可能无效。
var userID = "0984093843897"
NSPredicate(format:"%@ IN { %K, %K, %K, %K } AND active = true", userID, "userID1", "userID2", "userID3", "userID4"]